我正在尝试使用docker-machine在企业http代理后面的私有云(Openstack)上创建实例。
是否可以告诉docker-machine使用代理,还是我需要一个已经预先配置了http_proxy环境变量的glance镜像?
我正在尝试使用docker-machine在企业http代理后面的私有云(Openstack)上创建实例。
是否可以告诉docker-machine使用代理,还是我需要一个已经预先配置了http_proxy环境变量的glance镜像?
如先前提到的,您可以编辑该文件,位于
$HOME\.docker\machine\machines\default\config.json
并设置HTTP_PROXY、HTTPS_PROXY和NO_PROXY变量(或删除它们):
"HostOptions": {
"Driver": "",
...
"EngineOptions": {
...
"Env": [
"HTTP_PROXY=http://10.121.8.110:8080",
"HTTPS_PROXY=http://10.121.8.110:8080",
"NO_PROXY=192.168.23.4"
],
文件编辑完成后,只需执行以下命令:
docker-machine provision
目前的Docker Machine版本中,我找不到比在boot2docker中进行更改的更好方法(Docker/Boot2Docker: Set HTTP/HTTPS proxies for docker on OS X)
如果你在Docker Machine中手动设置代理,将其配置在 /var/lib/boot2docker/profile 中,在重启后,代理设置将被自动删除。
因此,我必须使用 --engine-env
在 Docker Machine 中创建代理。
docker-machine create -d virtualbox \
--engine-env HTTP_PROXY=http://example.com:8080 \
--engine-env HTTPS_PROXY=https://example.com:8080 \
--engine-env NO_PROXY=example2.com \
proxybox
这是两年前的回答,Docker 发生了很多变化,所以如果你仍然无法在代理后面使用它,请阅读@Senri's answer以及其他答案。
可以修改现有的docker-machine配置以添加代理环境。在$HOME/.docker/machine/machines//.config.json中编辑config.json。
在config.json的Env中添加"HTTP_PROXY=http://example.com:8080"。重新启动机器,就可以了。
如果您已经创建了虚拟机(VM),您可以像这样配置代理:
```1- SSH into the docker dev host: docker-machine ssh dev
2- Add the following lines to /var/lib/boot2docker/profile (this file is read-only, use sudo)
export HTTP_PROXY=http://<proxy>:<port>
export HTTPS_PROXY=http://<proxy>:<port>
3- Exit the ssh session and restart the docker machine: docker-machine restart dev
从Docker 18.09开始,我们可以像以下命令一样在命令行中为容器指定环境变量(如代理):
docker run --env HTTP_PROXY="172.10.13.14" -it myImage:latest /bin/bash
此外,我们还可以通过将这些设置写入~/.docker/config.json
文件来为Docker客户端指定它们:
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d/
sudo touch http-proxy.conf
sudo nano http-proxy.conf
# copy and paste in the file:
[Service]
Environment="HTTP_PROXY=http://<PROXYIP>:3128"
Environment="HTTPS_PROXY=http://<PROXYIP>:3128"
Environment="NO_PROXY=localhost,192.168.1.0/16,10.*.*.*"
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker
Windows:
使用Powershell更新环境变量(具有管理员权限):
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://<PROXYIP>:3128", [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://<PROXYIP>:3128", [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable("NO_PROXY", "192.168.*.*, 172.24.*.*, 172.25.*.*, 10.*.*.*, localhost, 127.0.0.1, 0.0.0.0/8", [EnvironmentVariableTarget]::Machine)
Restart-Service docker