gpt4 book ai didi

docker - 无法在Dockerfile中运行多个COMMAND,最后一个被忽略

转载 作者:行者123 更新时间:2023-12-02 20:41:23 26 4
gpt4 key购买 nike

我有以下运行良好的旧版Dockerfile:

FROM some/service:base

WORKDIR /myapp


COPY frontend/nginx.conf /etc/nginx/sites-enabled/my-site
COPY frontend/build dist
COPY . .

CMD service nginx start && cd /myapp/server1 && exec python3 app.py
现在,我需要稍作更新,并使其启动另外一台服务器,例如:
...
CMD service nginx start && cd /myapp/server1 && exec python3 app.py && cd /myapp/server2 && exec npm start server.js
这种方法失败了(即,我看不到我的server.js在运行)。我迷失了自己进行调试。任何帮助将不胜感激。
有没有一种方法而无需添加几个Docker层呢?如果可能的话,我想保持简单。

最佳答案

您的问题是(至少)由于在命令中使用了exec而引起的。exec命令用它作为参数接收的命令替换当前进程的,因此中断了&&命令链。
如何失败的示例:

FROM alpine
CMD echo 1 && exec echo 2 && echo 3
构建并运行此Dockerfile,您只会看到 12作为输出,而看不到 3
从命令中删除 exec,应该没问题。
进一步引用:
$ exec --help
exec: exec [-cl] [-a name] [command [arguments ...]]
Replace the shell with the given command.

Execute COMMAND, replacing this shell with the specified program.
另外,我会考虑将所有这些命令放在 entrypoint.sh脚本中,然后在 CMD中将它运行 运行,而不是使用 &&链接多个命令。

关于docker - 无法在Dockerfile中运行多个COMMAND,最后一个被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63407592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com