我使用openjdk构建了我的docker镜像。
# config Dockerfile
FROM openjdk:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
# build image
docker build -t shantanuo/dbt .
使用此命令正常运行...
docker run -p 8081:8080 -it shantanuo/dbt
登录后,我必须运行此命令......
sh bin/startup.sh
我的问题:是否可以将启动命令添加到dockerfile?我尝试在我的dockerfile中添加这一行。
CMD ["sh", "bin/startup.sh"]
但是在构建映像之后,我不能使用-d参数来启动容器。
答案 0 :(得分:2)
此问题在此处的文档中得到解决:https://docs.docker.com/config/containers/multi-service_container/
如果您的进程之一依赖于主进程,则首先使用wait-for-it之类的脚本启动辅助进程,然后启动主进程SECOND并删除fg%1行。
#!/bin/bash
# turn on bash's job control
set -m
# Start the primary process and put it in the background
./my_main_process &
# Start the helper process
./my_helper_process
# the my_helper_process might need to know how to wait on the
# primary process to start before it does its work and returns
# now we bring the primary process back into the foreground
# and leave it there
fg %1
答案 1 :(得分:1)
您可以使用entrypoint运行启动脚本。在入口点中,您可以指定自定义脚本,然后运行catlina.sh。例如:
ENTRYPOINT "bin/startup.sh && catalina.sh run"
这将运行您的启动脚本,然后启动您的tomcat服务器。它不会退出容器。
答案 2 :(得分:1)
docker容器必须具有专用任务。此任务/启动脚本不会终止是很重要的。如果确实如此,任务就完成了,并且docker的所有内容都已正确完成。
仅使用JDK启动容器是没有意义的。你必须把你的应用程序放在其中。
我认为当你发布你想要做的事情时会有所帮助。
Docker参考始终是一个值得关注的地方:https://docs.docker.com/engine/reference/builder/#entrypoint