【问题标题】:adding startup script to dockerfile将启动脚本添加到 dockerfile
【发布时间】:2018-01-04 09:46:05
【问题描述】:

我已经使用 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参数启动容器。

【问题讨论】:

  • “我不能使用-d参数启动容器”:为什么?也许您的启动脚本退出得太早了。命令退出时容器停止​​。
  • 如何保持命令运行?换句话说,我不希望容器在启动 tomcat 服务后退出。 shell 脚本在没有 docker 的情况下也能正常工作。
  • 如果是tomcat,你开始使用CMD ["bin/catalina.sh", "run"]
  • 手动运行脚本时,是否会在后台运行tomcat并返回bash shell?
  • TarunLalwani 是的,确实如此。 @Henry 是的,将您的 CMD 添加到 dockerfile 有效。我没有修改 startup.sh 文件。所以我想跳过它是可以的。对吗?

标签: docker dockerfile


【解决方案1】:

您可以使用entrypoint 来运行启动脚本。在入口点中,您可以指定您的自定义脚本,然后运行 ​​catlina.sh。示例:

ENTRYPOINT "bin/startup.sh && catalina.sh run"

这将运行您的启动脚本,然后启动您的 tomcat 服务器。它不会退出容器。

【讨论】:

  • @Henry 我添加了一个示例来演示入口点的用法。这使用入口点的 exec 形式。他可以做的另一件事是在启动脚本的末尾附加catlina.sh run 命令。
  • 我在docker-compose.yml 中使用了类似的东西,并且我认为我已经正确地为dockerfile 编写了等效语法。
【解决方案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

【讨论】:

    【解决方案3】:

    一个 docker 容器必须有一个专门的任务。此任务/启动脚本不会终止,这一点很重要。完成后,任务就完成了,docker 的一切都做好了。

    仅使用 JDK 启动容器是没有意义的。您必须将您的应用程序放入其中。

    我认为当你发布你真正想做的事情时会有所帮助。

    Docker 参考总是一个很好的地方:https://docs.docker.com/engine/reference/builder/#entrypoint

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多