Docker:无法运行存储在已装入卷中的shell脚本

时间:2016-02-26 18:16:29

标签: linux windows shell docker

我在 Windows 上运行Docker(1.10.2)。我创建了一个脚本来回应“Hello World'在我的机器上并将其存储在 C:/ Users / username / MountTest 中。我创建了一个新容器并将此目录(MountTest)作为数据卷安装。我运行的命令如下所示:

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

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

注意:此问题可能与Run shell script on docker from shared volume类似,但它解决了与权限相关的问题。

参考文献: helloworld.sh 文件:

#!/bin/sh

echo 'Hello World'

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

1 个答案:

答案 0 :(得分:1)

考虑到'ubuntu'图像的默认ENTRYPOINT是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 exec的bash中尝试docker run意味着尝试做DiD(Docker中的Docker)。它与您的测试无关。