“docker文件中的CMD ”不适用于docker-compose

我有一个Docker文件,这是完美的构build: docker build -t myfile . 但是当我试图用docker-compose运行它时 – 它给了我一个错误:

 web_1 | /bin/sh: 1: [/home/root/myproject/uwsgi.sh: not found myproject_web_1 exited with code 127 Gracefully stopping... (press Ctrl+C again to force) 

如果我手动启动这个脚本 – 它工作正常。

Dockerfile看起来像:

 FROM ubuntu:14.04 ADD ./myproject/ /home/root/myproject/ WORKDIR /home/root/myproject/ # Some other stuff... CMD ['/home/root/myproject/uwsgi.sh', 'start' ] 

泊坞窗,compose.yml:

 web: build: . ports: - "8888:8888" links: - db db: image: mysql 

为什么我得到这个错误? 谢谢。

我简化了你的例子

https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33229581

并用于:

泊坞窗,compose.yml

 web: build: . ports: - "8888:8888" 

找 。

 . ./docker-compose.yml ./Dockerfile ./myproject 

dockerbuild设和运行

 docker-compose build docker-compose run web 

当然,我得到了

 /bin/sh: 1: [/home/root/myproject/uwsgi.sh,: not found 

假设这是因为目录myproject中没有uwsgi.sh。

如果我添加uwsgi.sh

 echo 'echo $0 is there and called with params $@!' > myproject/uwsgi.sh chmod +x myproject/uwsgi.sh 

并用它来testing

 docker-compose run web /bin/bash ls cat uwsgi.sh ./uwsgi.sh start 

它在那里,行为如预期:

 root@9f06f8ff8c3b:/home/root/myproject# ls uwsgi.sh root@9f06f8ff8c3b:/home/root/myproject# cat uwsgi.sh echo $0 is there and called with params $@! root@9f06f8ff8c3b:/home/root/myproject# ./uwsgi.sh start ./uwsgi.sh is there and called with params start! root@9f06f8ff8c3b:/home/root/myproject# 

但是对于docker-compose运行web我仍然得到

 /bin/sh: 1: [/home/root/myproject/uwsgi.sh,: not found 

如果我将一个空白添加到Dockerfile CMD行:

 CMD [ '/home/root/myproject/uwsgi.sh', 'start' ] 

结果是:/ bin / sh:1:[:/home/root/myproject/uwsgi.sh,:意外的操作符

这使我们更接近。 作为下一步,我省略了“开始”参数。

 CMD [ '/home/root/myproject/uwsgi.sh' ] 

这现在导致根本没有输出…

如果我将CMD行更改为:

 CMD [ "/home/root/myproject/uwsgi.sh", "start" ] 

我明白了

  Cannot start container 0b9da138c43ef308ad70da4a7718cb96fbfdf6cda113e2ae0ce5e24de06f07cd: [8] System error: exec format error 

现在你可以继续像爱迪生一样的方法:

我没有失败。 我刚刚发现了一万种方法,这是行不通的。 直到你find

 CMD [ "/bin/bash", "/home/root/myproject/uwsgi.sh", "start" ] 

这使你更接近结果:

  /home/root/myproject/uwsgi.sh is there and called with params start! 

CMD期望一个可执行文件作为第一个参数,例如

https://docs.docker.com/compose/

具有

 CMD python app.py 

举个例子。 要运行你的shell脚本,你需要一个像bash这样的shell。 另见https://stackoverflow.com/a/33219131/1497139