docker 文件中的 "CMD ['/home/user/script.sh']" 不适用于 docker-compose
"CMD ['/home/user/script.sh']" in docker file doesn't work with docker-compose
我有一个 Docker 文件,它与以下文件完美构建: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)
如果我手动启动此脚本 - 它工作正常。
Docker文件 看起来像:
FROM ubuntu:14.04
ADD ./myproject/ /home/root/myproject/
WORKDIR /home/root/myproject/
# Some other stuff...
CMD ['/home/root/myproject/uwsgi.sh', 'start' ]
docker-compose.yml:
web:
build: .
ports:
- "8888:8888"
links:
- db
db:
image: mysql
为什么我会收到这个错误?
谢谢。
我稍微简化了你的例子
见https://github.com/BITPlan/docker-Whosebuganswers/tree/master/33229581
并使用:
docker-compose.yml
web:
build: .
ports:
- "8888:8888"
找到.
.
./docker-compose.yml
./Dockerfile
./myproject
docker 构建 & 运行
docker-compose build
docker-compose run web
当然我得到
/bin/sh: 1: [/home/root/myproject/uwsgi.sh,: not found
假设这是因为目录 myproject 中没有 uwsgi.sh。
如果我添加 uwsgi.sh 和
echo 'echo [=14=] is there and called with params $@!' > myproject/uwsgi.sh
chmod +x myproject/uwsgi.sh
并使用
进行测试
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 [=16=] 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,: 意外的运算符
这让我们更亲近了。作为下一步,我将省略 "start" 参数。
CMD [ '/home/root/myproject/uwsgi.sh' ]
这现在导致根本没有输出...
如果我将 CMD 行更改为:
CMD [ "/home/root/myproject/uwsgi.sh", "start" ]
我明白了
Cannot start container
0b9da138c43ef308ad70da4a7718cb96fbfdf6cda113e2ae0ce5e24de06f07cd: [8]
System error: exec format error
现在您可以继续采用类似爱迪生的方法:
我没有失败。我刚刚发现了 10,000 种行不通的方法。
直到你找到
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 脚本,您需要一个 shell,例如 bash。
另见
对于寻求此错误消息帮助的其他人:我发现在我的情况下,这是由 CMD 行中缺少逗号引起的。错误状态:
$ grep ^CMD Dockerfile
CMD ["/bin/sh" "-c" "hostname"]
$ docker run --rm -it hostname
/bin/sh: 1: [/bin/sh: not found
像这样正确放置逗号解决了问题:
$ grep ^CMD Dockerfile
CMD ["/bin/sh", "-c", "hostname"]
我有一个 Docker 文件,它与以下文件完美构建: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)
如果我手动启动此脚本 - 它工作正常。
Docker文件 看起来像:
FROM ubuntu:14.04
ADD ./myproject/ /home/root/myproject/
WORKDIR /home/root/myproject/
# Some other stuff...
CMD ['/home/root/myproject/uwsgi.sh', 'start' ]
docker-compose.yml:
web:
build: .
ports:
- "8888:8888"
links:
- db
db:
image: mysql
为什么我会收到这个错误? 谢谢。
我稍微简化了你的例子
见https://github.com/BITPlan/docker-Whosebuganswers/tree/master/33229581
并使用:
docker-compose.yml
web:
build: .
ports:
- "8888:8888"
找到.
.
./docker-compose.yml
./Dockerfile
./myproject
docker 构建 & 运行
docker-compose build
docker-compose run web
当然我得到
/bin/sh: 1: [/home/root/myproject/uwsgi.sh,: not found
假设这是因为目录 myproject 中没有 uwsgi.sh。
如果我添加 uwsgi.sh 和
echo 'echo [=14=] is there and called with params $@!' > myproject/uwsgi.sh
chmod +x myproject/uwsgi.sh
并使用
进行测试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 [=16=] 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,: 意外的运算符
这让我们更亲近了。作为下一步,我将省略 "start" 参数。
CMD [ '/home/root/myproject/uwsgi.sh' ]
这现在导致根本没有输出...
如果我将 CMD 行更改为:
CMD [ "/home/root/myproject/uwsgi.sh", "start" ]
我明白了
Cannot start container
0b9da138c43ef308ad70da4a7718cb96fbfdf6cda113e2ae0ce5e24de06f07cd: [8]
System error: exec format error
现在您可以继续采用类似爱迪生的方法:
我没有失败。我刚刚发现了 10,000 种行不通的方法。 直到你找到
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 脚本,您需要一个 shell,例如 bash。
另见
对于寻求此错误消息帮助的其他人:我发现在我的情况下,这是由 CMD 行中缺少逗号引起的。错误状态:
$ grep ^CMD Dockerfile
CMD ["/bin/sh" "-c" "hostname"]
$ docker run --rm -it hostname
/bin/sh: 1: [/bin/sh: not found
像这样正确放置逗号解决了问题:
$ grep ^CMD Dockerfile
CMD ["/bin/sh", "-c", "hostname"]