如何在 Dockerfile 中转义 CMD



我尝试通过以下语法排列在 docker 中启动服务器:

  1. CMD [ "forever", "start", "server/server.js" ]
  2. CMD [ "forever", "start", "server/server.js" ]
  3. CMD forever start server/server.js

但他们每个人都失败了。

前两个运行为"forever start server"...请注意缺失的/server.js件。

最后一个运行为"/bin/sh -c 'forever "

那么,将forever start server/server.js放在Dockerfile中以将其作为分离容器运行的正确语法是什么?

我在运行 docker 容器时遇到了同样的问题。

从 docker 参考中,您有三个机会:

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

看看这里: 码头工人CMD

我不熟悉 JavaScript,但假设您要启动的应用程序是 Java 应用程序:

CMD ["/some path/jre64/bin/java", "server.jar", "start", "forever", ...]

正如您评论中的其他人所说,您还可以通过 docker ADDCOPY 在您的Dockerfile中添加脚本并使用 docker RUN 启动它。

另一种解决方案是运行 docker 容器并通过容器内的 docker run .. -v HOSTDIR:CONTAINERDIR 挂载具有所需脚本的目录,并使用 docker exec 触发该脚本。

在这里阅读: Docker 文件挂载 + Docker Exec

只需按照评论中的建议通过sh -c运行它,语法为:

CMD["/bin/sh", "-c", "'forever start server/server.js'"]

如果您的工具需要登录 shell 才能运行,也可以尝试一下:

CMD["/bin/bash", "-lc", "'forever start server/server.js'"]

这应该可以正常工作,与将命令放入单行中的标准 sh shell 具有相同的效果。

最新更新