“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
- Docker-Squash命令不起作用
- Docker for Windows和docker-maven-plugin – “SSLException:无法识别的SSL消息,明文连接”错误
- Docker selenium / node-chrome – 量angular器找不到Chrome二进制文件
- 无法通过Virtual Box从Docker容器访问HTTPS服务
- 隐藏在密码下的swagger UI
- Docker Websocket附加在NodejS中
- 将Docker上的PostgreSQL持久存储转换为现代docker存储
- 无法复制到Windows 10中的Windows容器(docker cp)
- 用于根据用户操作调配单个容器的容器业务stream程