我刚刚在 Windows 环境(Windows 7 Pro)上安装了 docker 工具箱,由于企业代理,我遇到了网络超时。如何在 docker toolbox 中设置代理?
谢谢你的帮助。
我刚刚在 Windows 环境(Windows 7 Pro)上安装了 docker 工具箱,由于企业代理,我遇到了网络超时。如何在 docker toolbox 中设置代理?
谢谢你的帮助。
我遇到了同样的问题。这是我的解决方案。
环境:
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/"
至少,它对我有用。
我对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 虚拟机已启动并正在运行)
输入 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
笔记:
在企业代理后面的Windows 7 (docker 18.09.0)上安装docker 对我来说非常复杂。以下是我遵循的步骤:
choco install docker-toolbox
警告!不要将 Docker 用于 Windows,因为它针对的是 Windows 10)docker-machine ls
应该为空。如果未运行docker-machine rm default
:)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
。这应该有效。我在安装 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
我收到了
无法在本地 C:\Program Files\Docker Toolbox\docker.exe 找到图像“hello-world:latest”:来自守护进程的错误响应:获取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/我已经/var/lib/boot2docker/profile
在 docker 机器中注册了我的企业代理:
用于
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
了,但没有帮助。
结果,我编写了使用Putty ( https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.htmlAddDockerMachineProxy.cmd
)编写代理设置的脚本。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
啊! 实际上,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 快速启动终端,它将创建以default
您的 VirtualBox 或其他名称命名的虚拟机。它还将显示您新创建的虚拟机的地址,例如
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)也在正在运行的容器中设置正确的 env,请将与config.json
p.3 中相同的内容放在 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.xx 。如果是这样,通过在 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)不要重启你的虚拟机,需要的时候暂停一下。