docker-compose,容器启动后运行脚本?

新手上路,请多包涵

我有一项通过 docker-compose 通过 Rancher 提供的服务。我遇到的问题是我需要在部署容器后设置密码。

Rancher Secret 的工作方式是,我设置我的 Secret,然后 Rancher 将在我的容器上安装一个卷,其中包含一个包含我的 Secret 的文件。我希望能够执行一个脚本来获取该秘密,并将其设置为我的配置文件中的密码。

我不相信我有办法通过 Dockerfile 获取该秘密,因为我不希望秘密存在于 git 中,所以我只能通过 docker-compose 来实现。

有谁知道这是否可能?

原文由 Blooze 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
1 个回答

诀窍是在调用原始命令之前覆盖 compose COMMAND 以执行您需要的任何初始化操作。

  1. 在您的映像中添加一个脚本,该脚本将执行您想要的初始化工作,例如设置密码、更改内部配置文件等。我们称之为 init.sh 。您将其添加到您的图像中。

Dockerfile:

 FROM: sourceimage:tag
COPY init.sh /usr/local/bin/
ENTRYPOINT []

以上覆盖了 sourceimage 中定义的任何入口点。这是为了让这个例子更简单。确保您从 sourceimage 了解 ENTRYPOINT 在 Dockerfile 中的作用,并在 docker-compose.yml 文件的 command: 中调用它。

码头工人-compose.yml:

 services:
  myservice:
    image: something:tag
    ...
    command: sh -c "/usr/local/bin/init.sh && exec myexecutable"

在调用主命令之前使用 exec 很重要。这会将命令安装为第一个进程 (PID1),这将使其接收 STOP、KILL(键盘上的 Ctrl-C)或 HUP 等信号。

原文由 Bernard 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题