2016-02-26 64 views
3

我在Windows上运行Docker(1.10.2)。我创建了一个脚本来在我的机器上回显“Hello World”并将其存储在C:/ Users/username/MountTest中。我创建了一个新的容器,并将这个目录(MountTest)作为数据卷装载。我跑这样做的命令如下所示:Docker:无法运行存储在已安装卷中的shell脚本

docker run -t -i --name mounttest -v /c/Users/sarin/MountTest:/home ubuntu /bin/bash 

接下来,我运行命令到容器mounttest内执行脚本。

docker exec -it mounttest sh /home/helloworld.sh 

结果如下:

: not foundworld.sh: 2: /home/helloworld.sh: 
Hello World 

我得到所需的输出(回声的Hello World),但我想了解背后未发现错误的原因。

注意:此问题可能看起来类似于Run shell script on docker from shared volume,但它涉及权限相关的问题。

参考文献:helloworld.sh文件:

#!/bin/sh 

echo 'Hello World' 

的安装的卷信息如下捕获。 enter image description here

+0

请张贴'helloworld.sh'和您的调用的确切内容。 – Koder

+0

'helloworld.sh'是否有窗口风格的行结尾('\ r \ n')? – Roman

+0

@罗曼不,不。 – Sarin

回答

0

考虑为'Ubuntu的图像默认入口点是sh -c,在docker exec执行的最后一个命令是:

sh -c 'sh /home/helloworld.sh' 

它看起来有点怪怪的,可能是错误消息的原因。

尝试简单:

docker exec -it mounttest /home/helloworld.sh 
# or 
docker exec -it mounttest sh -c '/home/helloworld.sh' 

当然,docker exec应在boot2docker SSH会话来完成,simalar到您做了docker run的shell会话。
由于docker run打开了一个bash,因此应该创建一个新的boot2docker会话(docker-machine ssh),并在该新的boot2docker shell会话中尝试docker exec

docker run创建的bash内尝试docker exec表示试图执行DiD(Docker中的Docker)。这与您的测试无关。

+0

感谢您的回答。但是,上面提出的命令并不能解决问题。我得到以下错误,运行这些命令:'sh:1:/home/helloworld.sh:not found' – Sarin

+0

@Sarin可以肯定的是,你是在docker run后面运行docker exec吗? --name mounttest -v/c/Users/sarin/MountTest:/ home ubuntu/bin/bash'?含义:你是否在由docker run创建的bash会话中运行docker exec?因为如果是这样,那不是它的工作原理。 – VonC

+0

@Sarin我编辑了答案,以明确哪些命令应该在哪里输入。 – VonC