【问题标题】:Docker - run provisioning script in DockerfileDocker - 在 Dockerfile 中运行配置脚本
【发布时间】:2018-08-31 09:50:25
【问题描述】:

这是我想要实现的——请不要问我为什么:)

我想用两个脚本运行容器(使用 Dockerfile):默认一个 + 附加脚本,它将在 1 分钟后对容器执行一些操作。

编辑: 这是服务容器,所以它应该在执行附加脚本后工作。

最好的方法是什么?

【问题讨论】:

  • 为什么在执行完第一部分后不添加睡眠?

标签: bash docker nexus3


【解决方案1】:

我会设置一个ENTRYPOINT 脚本,它结合了两个脚本,在它们之间有一个sleep。例如:

entrypoint.sh

<execute steps from default script>
sleep 1m
<execute steps from additional script>

并将其定义为Dockerfile中的最后一步:

...
ENTRYPOINT entrypoint.sh

【讨论】:

  • 这将是服务容器,因此 ENTRYPOINT 将使其在执行脚本后退出:) - 请参阅编辑。在这种情况下我们能做些什么?
  • 容器中是否有进程作为服务运行 - 例如 nginx?在这种情况下,您可以从ENTRYPOINT 运行它,它不会退出。如果没有进程(不推荐),您始终可以在 ENTRYPOINT 的最后一行运行 tail -f /dev/null 以保持容器运行。
  • 是的,你是对的。现在我遇到了这个问题 - 我的 ENTRYPOINT 脚本包含以下几行:1) ${SONATYPE_DIR}/start-nexus-repository-manager.sh 2) curl -u admin:admin123 -X GET 'localhost:8081/service/rest/v1/repositories' 3) touch ./ file First - 它是运行 nexus 存储库管理器的默认脚本,另外两个是附加脚本。日志以:“Started Sonatype Nexus OSS 3.13.0-01”结尾,那么之后我是否应该期望 curl / created 文件的记录结果?
  • 理想情况下,容器中应该只运行一个进程。如果您想运行其他脚本,最好在单独的容器中运行它们并使用 docker compose 协调它们。
猜你喜欢
  • 2020-01-02
  • 2016-04-05
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多