【问题标题】:Run commands on create a new Docker container在创建新的 Docker 容器时运行命令
【发布时间】:2015-04-15 20:28:24
【问题描述】:

是否可以在Dockerfile 中添加类似RUN 的指令,而不是在docker build 命令上运行,而是在使用docker run 创建新容器时执行?我认为这对于初始化附加到主机文件系统的卷很有用。

【问题讨论】:

  • 仅供参考 - 可以使用 docker run 创建新容器,但也可以使用 docker create 创建新容器。 AFAIK 仅在运行 docker create 时没有可以运行的命令。

标签: docker dockerfile


【解决方案1】:

我想你正在寻找CMD

https://docs.docker.com/reference/builder/#cmd

CMD 的主要目的是为执行提供默认值 容器。这些默认值可以包括可执行文件,也可以省略 可执行文件,在这种情况下,您必须指定 ENTRYPOINT 指导。

注意:不要将RUNCMD 混淆。 RUN 实际运行一个命令并且 提交结果; CMD 在构建时不执行任何操作,但是 指定图像的预期命令。

您还应该考虑使用数据容器,请参阅这篇出色的博客文章。

使用 Docker 的持久卷 - 仅数据容器模式 http://container42.com/2013/12/16/persistent-volumes-with-docker-container-as-volume-pattern/

【讨论】:

  • 使用CMD 有一个缺点:Dockerfile 可以有很多,但只有最后一个会运行。
【解决方案2】:

看看ENTRYPOINT 命令。这指定了在容器启动时运行的命令,而不管有人在docker run 命令行上作为命令提供了什么。事实上,ENTRYPOINT 脚本的工作就是解释传递给docker run 的任何命令。

【讨论】:

  • 一个ENTRYPOINT 脚本将在docker start 上运行,但您可以轻松地在脚本中包含逻辑,以便它可以检查它之前是否运行过。
  • 虽然我认为这不是一个好方法,但这是一个 Docker 问题。 ENTRYPOINT 似乎是一个合适的解决方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多