【问题标题】:Docker: How to create an environment variable in the host machine that points to a directory in a docker container?Docker:如何在主机中创建一个指向 docker 容器中目录的环境变量?
【发布时间】:2020-12-13 18:40:46
【问题描述】:

我正在使用 Docker 运行四个容器来运行后端 Web 应用程序。后端 Web 应用程序使用buildout 组装软件。

但是,在主机上安装并运行的前端(即不使用 Docker)需要访问四个 docker 容器之一内的buildout 目录。

此外,前端使用在主机上定义的名为NTI_BUILDOUT_PATH 的环境变量。 NTI_BUILDOUT_PATH 必须指向上述容器内的buildout 目录。

我的问题是我不知道如何定义NTI_BUILDOUT_PATH,以便它包含一个指向buildout 目录的目录,该目录是前端用于SSL 证书和其他目的所需的。

我在网络上进行了研究并阅读了有关 volumesbind mounts 的信息,但我认为它们对我的情况没有帮助。

【问题讨论】:

  • 您能提供一个minimal reproducible example 来证明这一点吗?一般来说,主机进程不能直接访问容器文件系统(反之亦然),因此您可能需要重新安排它以在 Docker 之外运行更多构建过程。

标签: docker environment-variables buildout


【解决方案1】:

一种方法是使用docker cpbuildout 文件夹复制到主机中

docker cp <backend-container-id>:<path-to-buildout> <path-to-host-folder>

例如,如果您的后端的 container_id 是 d1b5365c5bca 并且您的 buildout 文件夹位于容器内的 /app/buildout 中。您可以使用以下命令将其复制到主机。

docker cp d1b5365c5bca:/app/buildout /home/mahmoud/app/buildout

之后,您 docker rm 所有容器并使用 bind mount 重新创建新容器到主机中的 buildout 文件夹。因此,按照前面的示例,我们将拥有

docker run -v /home/mahmoud/app/buildout:/app/buildout your-backend-image
docker run -v /home/mahmoud/app/buildout:/app/buildout -e NTI_BUILDOUT_PATH=/app/buildout your-frontend-image

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2016-05-30
    • 2020-01-28
    • 2015-04-02
    • 2021-08-01
    • 2014-06-19
    相关资源
    最近更新 更多