【发布时间】:2016-11-21 11:36:32
【问题描述】:
是否可以设置环境。所有未来 Docker 容器的变量?
这将有助于为特定主机设置 http 代理,而无需更改 Docker 映像文件或运行容器的方式(因此相同的 Docker 容器可以在不同的“上下文”上正常运行)。
也许通过/etc/default/docker?
【问题讨论】:
是否可以设置环境。所有未来 Docker 容器的变量?
这将有助于为特定主机设置 http 代理,而无需更改 Docker 映像文件或运行容器的方式(因此相同的 Docker 容器可以在不同的“上下文”上正常运行)。
也许通过/etc/default/docker?
【问题讨论】:
Docker compose 使用变量替换,因此您可以在 docker-compose 文件中使用主机变量:
如果您的 bash 会话定义了一个名为 EXTERNAL_PORT 的变量。
web:
build: .
ports:
- "${EXTERNAL_PORT}:5000"
检查:https://docs.docker.com/compose/compose-file/#variable-substitution
如果是代理,我猜如果在当前 shell 会话中定义,则使用 HTTP_PROXY 应该默认重定向流量。
export http_proxy=http://10.203.0.1:5187/
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
类似的东西应该重定向所有的http流量,你可以从.bashrc设置它。从来没有用 docker 测试过,让我知道它是否有效。
【讨论】:
HTTP_PROXY 与配置代理的 docker 或 docker-compose 无关,它只是一个 linux 环境变量。它还有一个 Windows 对应项。我会创建一个自定义用户来运行配置了所有环境变量的图像。
如果你没有像 Marcs 所说的那样使用 docker-compose,那么就没有。
Dockerfiles 创建二进制文件。 dockerfile(或 docker-compose yaml 或 docker build)中未指定的任何内容都不会进入容器。这是出于许多安全原因以及一般最佳实践,因为人们可能会导致这些容器依赖于主机本身。要么使用 docker-compose 进行构建,要么考虑对主机本身进行更改以影响 docker 容器的该层,例如影响 172 子网的系统范围代理
【讨论】:
docker run 运行的不是吗?我想自动通过docker run -e K1=V1 ...。所以开发者并不关心代理。