如何在Dockerfile CMD中使用引号

8

我在我的Dockerfile中有以下内容:

ENTRYPOINT ["/bin/wait-for", "wordpress:9000", "--"]
CMD nginx -g "daemon off;"

这将导致:
nginx_1      | Attempting...
nginx_1      | Command: /bin/sh -c nginx -g "daemon off;"
nginx_1      | Attempting to execute command:
nginx_1      | /bin/sh -c nginx -g "daemon off;"
ayurved_nginx_1 exited with code 0

我猜问题在于引号......如何使它执行/bin/wait-for wordpress:9000 -- nginx -g "daemon off;"

如果您使用 CMD 的 JSON 格式会怎样呢? CMD ["nginx", "-g", "\"daemon off;\""] - larsks
我猜这个应该可以工作 CMD ["nginx -g 'daemon off;'"] - Tarun Lalwani
最好的选择是根本不要使用 /bin/sh -c。如果没有 shell,那么你的其余 argv 就会像现在一样正确。 - Charles Duffy
我不知道它从哪里获取/bin/sh -c - Chris Stryczynski
你能提供一个合适的 [mcve],这样我就可以自己运行容器了吗?从那里我可能可以弄清楚。 - Charles Duffy
显示剩余5条评论
1个回答

2

当我在使用exec表单(即JSON数组)中的CMD时,遇到了类似的问题。

简而言之,当无法正确解析CMD项时,似乎会引入回退机制,引入/bin/sh

我找不到确切的规则,但有一些示例:

ENTRYPOINT ["reflex"]
CMD ["-r", ".go$"]

$ docker inspect --format '{{.Config.Cmd}}' inventories_service_dev_1 
[-r .go$]

ENTRYPOINT ["reflex"]
CMD ["-r", "\.go$"]

$ docker inspect --format '{{.Config.Cmd}}' inventories_service_dev_1 
[/bin/sh -c ["-r", "\.go$"]]

请注意上面的代码中的\

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接