【问题标题】:Configuring a dockerfile to 'read' from a directory?将 dockerfile 配置为从目录中“读取”?
【发布时间】:2019-11-03 14:35:32
【问题描述】:

我正在构建一个使用 docker 的 webapp(一个简单的烧瓶站点)。我希望我的开发代码不驻留在 docker 中,而是由我在 dockerfile 中定义的开发环境(使用 python3)执行。我知道我可以在 dockerfile 中使用COPY . . 语法将我的源代码复制到映像中以供执行,但这违反了我将容器与源分离的目标。有没有办法让 docker 容器读取并执行它在我运行 docker container run 命令的目录中的代码?

现在我的容器使用复制公司将所有源代码复制到容器中。然后它使用CMD 命令自动运行烧瓶应用程序:

CMD [ "python", "flask_app/server.py" ]

(我将所有烧瓶代码存储在一个名为flask_app 的目录中)。我假设这是可行的,因为所有这些都已复制到容器中(根据 dockerfile 中给出的规范),并且在我运行容器时正在执行。我希望容器能够访问和执行flask_app/server.py 而无需将这些信息复制到自身中——这可能吗?如果有,怎么做?

【问题讨论】:

  • 您可以使用docker run--volume /HOST/PATH:/CONTAINER_PATH 选项将您的主机代码挂载到容器上。除此之外,只拥有一个开发 dockerfile 和一个生产 dockerfile 是否有意义?

标签: python docker flask dockerfile


【解决方案1】:

您将使用“绑定挂载”(https://docs.docker.com/storage/bind-mounts/),而不是使用 COPY 将代码移动到容器中。

当你运行容器时,你会使用这样的命令:

docker run --mount type=bind,source=<path_outside_container>,target=<path_inside_container> <image_tag>

为了可移植性,我建议将此行放在旨在从存储库根目录运行的脚本中,并将&lt;path_outside_container&gt; 设置为"$(pwd)",以便它可以在其他人的计算机上运行。您需要调整 &lt;path_inside_container&gt;CMD,具体取决于您希望代码在容器内的位置。

(显然,您还可以在命令中添加任何其他选项,例如 --it --rm-p &lt;whatever&gt;。)

【讨论】:

  • 非常感谢——这成功了!我将继续使用它!
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 2016-10-18
  • 2021-10-07
  • 2020-04-21
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多