如何在 docker 工具箱中设置代理?
Posted
技术标签:
【中文标题】如何在 docker 工具箱中设置代理?【英文标题】:How to set proxy in docker toolbox? 【发布时间】:2016-08-19 01:24:54 【问题描述】:我刚刚在 Windows 环境(Windows 7 Pro)上安装了 docker 工具箱,但由于企业代理,我遇到了网络超时。
感谢您的帮助。
【问题讨论】:
【参考方案1】:我遇到了同样的问题。这是我的解决方案。
环境:
Win7,Docker Toolbox 17.03,cmder终端,背后企业代理设置。
解决方案:
在 C:\Program Files\Docker Toolbox 中,找到 start.sh 文件。添加以下两个代理设置:
export http_proxy="http://hostname:port/"
export https_proxy="http://hostname:port/"
至少,它对我有用。
【讨论】:
它也对我有用,谢谢:)。只是为了添加更多信息,如果您必须为您的代理提供用户和密码,您应该以下列方式提供它们:#!/bin/bash export http_proxy="http://[user]:[password]@hostname:port/" export https_proxy="http://[user]:[password]@hostname:port/"
谢谢。我在start.sh
文件中的第一个trap ...
命令之后添加了export http_proxy="http://hostname:port/" export https_proxy="http://hostname:port/"
。【参考方案2】:
我在 Windows 7 上遇到了类似的问题,但通过以下步骤解决了:
步骤 1. 使用以下配置创建批处理脚本 C:\Program Files\Docker Toolbox\kitematic_proxy.cmd
set proxy=YOUR_PROXY
SET HTTP_PROXY=%proxy%
SET HTTPS_PROXY=%proxy%
for /f %%i in ('docker-machine.exe ip default') do set DOCKER_HOST=%%i
SET NO_PROXY=%DOCKER_HOST%
set DOCKER_HOST=tcp://%DOCKER_HOST%:2376
cd Kitematic
Kitematic.exe
步骤 2. 从开始菜单打开 Oracle 虚拟机,单击 显示 进入命令提示符(确保您的 Oracle Vm 已启动并运行)
输入 sudo vi /var/lib/boot2docker/profile
添加这行
export HTTP_PROXY=http://your.proxy.name:8080
export HTTPS_PROXY=http://your.proxy.name:8080
使用您的代理地址和端口
这个链接对我帮助很大 https://github.com/docker/kitematic/wiki/Common-Proxy-Issues-&-Fixes
注意:
-
不要忘记将 192.168.99.100 ip 添加到代理设置的例外列表中(使用 inetcpl.cpl)
不要忘记将 HTTP_PROXY 和 HTTPS_PROXY 添加到您的用户变量(高级设置->环境变量)
别忘了重启你的电脑
【讨论】:
【参考方案3】:在企业代理后面的 windows 7 (docker 18.09.0) 上安装 docker 对我来说相当复杂。以下是我遵循的步骤:
-
在 Windows 环境中设置 HTTP_PROXY 变量 (HTTP_PROXY=http://your_proxy:port)
使用安装程序安装 docker 工具箱或以管理员身份在 powershell 中运行:
choco install docker-toolbox
(警告!不要将 Docker 用于 Windows,因为它针对 Windows 10)
确保您之前的尝试没有创建任何之前的 VM(docker-machine ls
应该为空。如果未运行:docker-machine rm default
)
以用户身份在 powershell 中运行:docker-machine --native-ssh create -d virtualbox --engine-env HTTP_PROXY=$HTTP_PROXY --engine-env HTTPS_PROXY=$HTTPS_PROXY default
。
运行C:\Program Files\Docker Toolbox\start.sh
现在运行docker pull busybox
。这应该可行。
【讨论】:
【参考方案4】:我在安装 Windows 7 Docker 工具箱时遇到问题
$ docker --version
Docker version 18.09.3, build 774a1f4eee
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
当我尝试时
docker run hello-world
我收到了
无法在本地找到图像“hello-world:latest” C:\Program Files\Docker Toolbox\docker.exe:来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:net/http:在等待连接时取消请求(等待标头时超出了 Client.Timeout)。 请参阅“C:\Program Files\Docker Toolbox\docker.exe run --help”。
根据https://docs.docker.com/toolbox/faqs/troubleshoot/我已经在docker机器内的/var/lib/boot2docker/profile
注册了我的企业代理:
使用
ssh
登录虚拟机。本例登录default
机器。$ docker-machine ssh default docker@default:~$ sudo vi /var/lib/boot2docker/profile
然后我在profile
的末尾添加了我的企业代理
export "HTTP_PROXY=http://host:port"
export "HTTPS_PROXY=http://host:port"
然后我继续说明
将
NO_PROXY
设置添加到文件末尾,类似于以下示例。export "NO_PROXY=192.168.*.*"
重启 Docker。 修改 VM 上的
profile
后,重新启动 Docker 并注销机器。docker@default:~$ sudo /etc/init.d/docker restart docker@default:~$ exit
之后docker run hello-world
命令运行良好
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
电脑重启后配置丢失
正如@rsb2097 提到的,每次 PC 重新启动 Docker Machine 后都会丢失 /var/lib/boot2docker/profile
中的设置。我也面临同样的问题,我不知道如何避免这种情况,但我制作了一个脚本来更简单地编写这些设置。
我认为这是因为我在没有停止 docker 机器的情况下关闭了 PC(VirtualBox 说关闭时有活动连接):假设它损坏了。
我试过docker-machine stop
,但没有帮助。
因此,我编写了 AddDockerMachineProxy.cmd
脚本,该脚本使用来自 Putty (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 的 plink.exe
写入代理设置。
用法
-
重启电脑。
运行Docker Quickstart Terminal
,我有以下输出:
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server.
Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses.
You may need to re-run the `docker-machine env` command.
Regenerate TLS machine certs?
Warning: this is irreversible. (y/n): Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
运行AddDockerMachineProxy.cmd
脚本(plink.exe
必须在%PATH%
中):
@echo off
echo Was "Docker Quickstart Terminal" run after the reboot to init the machine?
echo If not this script fails.
pause
set "exePlink=plink.exe"
set "connectionString=-pw tcuser docker@192.168.99.100"
echo Profile BEFORE:
call "%exePlink%" %connectionString% cat /var/lib/boot2docker/profile
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
echo APPENDING PROXY
call "%exePlink%" %connectionString% sudo bash -c "'echo export \"HTTP_PROXY=http://host:port\">> /var/lib/boot2docker/profile'"
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
call "%exePlink%" %connectionString% sudo bash -c "'echo export \"HTTPS_PROXY=http://host:port\">> /var/lib/boot2docker/profile'"
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
call "%exePlink%" %connectionString% sudo bash -c "'echo export \"NO_PROXY=192.168.*.*\">> /var/lib/boot2docker/profile'"
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
echo Profile AFTER:
call "%exePlink%" %connectionString% cat /var/lib/boot2docker/profile
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
echo Restart docker service:
call "%exePlink%" %connectionString% sudo /etc/init.d/docker restart
if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
echo Testing connection
call docker image pull hello-world || ( echo ERROR: docker image pull is failed !!! & goto BadExit )
echo Done!
exit /b 0
:BadExit
echo ERROR !!!
exit /b 1
【讨论】:
它适用于我,但我重新启动电脑后配置丢失。 @rsb2097,是的,每次 PC 重启后我都会丢失配置。我认为那是因为我在没有停止 docker 机器的情况下关闭了 PC(VirtualBox 说关闭时有活动连接)。我试过docker-machine stop
,但没有帮助。因此,我编写了 .cmd
-script,它使用来自 Putty (chiark.greenend.org.uk/~sgtatham/putty/latest.html) 的 plink.exe
编写代理设置。我将在答案中添加我的脚本。
它也适用于我,但我不得不将外壳从 bash
更改为 sh
【参考方案5】:
啊!实际上,Docker Toolbox windows 部分只是创建虚拟机的一个非常薄的层,所以我的方法是配置虚拟机本身以使一切正常。所以。
0) 在 Windows 主机上设置全局环境变量
HTTP_PROXY = "http://login:password@yourproxy:8080"
HTTPS_PROXY = "http://login:password@yourproxy:8080"
注意大写字母! (也可以设置FTP_PROXY
和NO_PROXY
)
1) 运行 Docker 快速启动终端,它将在您的 VirtualBox 或其他目录下创建名为 default
的虚拟机。它还将显示您新创建的虚拟机的地址,例如
docker is configured to use the default machine with IP 192.168.99.104
2) SSH 到此地址(即使用 PuTTY)。登录:docker
密码:tcuser
3) 运行
echo '
"proxies":
"default":
"httpProxy": "http://login:password@yourproxy:8080",
"httpsProxy": "http://login:password@yourproxy:8080"
' > /home/docker/.docker/config.json
这将强制 docker 客户端(在 VM 上!)运行内部具有正确环境的容器。
4) 现在你可以在 VM 中使用 docker 客户端了。要强制 Windows docker 客户端(以及 docker-compose)也在正在运行的容器中设置正确的环境,请将与第 3 页相同的 config.json
在 Windows 主机上放置到 C:\User\<yourhomedir>\.docker
目录。
现在检查运行容器内的环境
docker run -ti ubuntu env
HTTPS_PROXY=http://login:password@yourproxy:8080
https_proxy=http://login:password@yourproxy:8080
HTTP_PROXY=http://login:password@yourproxy:8080
http_proxy=http://login:password@yourproxy:8080
请注意,CAPS 和小写字母变量均已正确设置!
最后检查一切正常:
docker run -ti ubuntu apt-get update
5) 您可能面临的一个问题是您的代理地址来自网络,docker 在创建自己的网络时使用该地址,因此在您执行docker network create
之后它会破坏到您的代理的路由。因此,请确保代理地址不像 172.18.x.x 。如果是这样,通过在 VM 上进行另一个配置,强制 docker 为创建的网络使用另一个地址空间
sudo -i
echo '
"default-address-pools": [
"base":"172.80.0.0/16","size":24
]
' > /etc/docker/daemon.json
然后重启dockerd/etc/init.d/docker restart
6) 不要重启虚拟机,需要时暂停。
【讨论】:
以上是关于如何在 docker 工具箱中设置代理?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Matlab 模式识别工具箱(PRTools)中设置连续标签