我尝试通过以下语法排列在 docker 中启动服务器:
-
CMD [ "forever", "start", "server/server.js" ]
-
CMD [ "forever", "start", "server/server.js" ]
-
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 ADD
或COPY
在您的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 具有相同的效果。