Docker 在 linux VMware 机器上:apt-get 和代理出错
Docker on a linux VMware machine: error with apt-get and proxy
我有一台装有 linux mint 18.3 的 VMware 机器(主机是 windows 10)。主机在代理后面。来宾机器 (linux mint) 网络配置为 "Bridged"?
我尝试在客户机 OS 上编写一个简单的 Dockerfile 并构建它,但 apt-get 命令有问题:
FROM ubuntu:xenial
RUN apt-get update && apt-get install -y \
bzip2 \
g++ \
make \
ncurses-dev \
wget \
zlib1g-dev
它给了我:
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Temporary failure resolving 'security.ubuntu.com'
我尝试在 Dockerfile 中添加:
ENV http_proxy 'http://proxy_adress:3128'
ENV https_proxy 'http://proxy_adress:3128'
并收到此错误:
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Temporary failure resolving 'proxy_adress'
我是否必须更改 VMware 配置中的某些内容?或者在 Dockerfile 中?
谢谢
在构建时不需要将 ENV
添加到您的 Dockerfile:在 docker 构建期间,唯一需要代理的是 docker 守护进程。
参见“Control Docker with systemd", especially the section "HTTP/HTTPS proxy”
/etc/systemd/system/docker.service.d/http-proxy.conf
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporatio
其次是:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Verify that the configuration has been loaded:
$ systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/
这将与dns服务器有关。
尝试将默认 dns 服务器设置为另一个服务器,例如 114.114.114.114:
sed -i 's/\(nameserver\) .*/ 114.114.114.114/' /etc/resolv.conf
您的容器似乎无法解析代理的主机名。因此,当您构建容器时,传递以下附加参数:
--dns=IP_ADDRESS...
这将执行此操作:
Sets the IP addresses added as nameserver lines to the container's /etc/resolv.conf file. Processes in the container, when confronted with a hostname not in /etc/hosts, will connect to these IP addresses on port 53 looking for name resolution services.
来源:https://docs.docker.com/v17.09/engine/userguide/networking/default_network/configure-dns/
我假设您在公司网络中,您需要进行两项更改。
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.X.Y.Z
search myorg.org
您需要在 docker 守护程序配置中设置这些。您可以通过创建一个包含以下内容
的文件 /etc/docker/daemon.json
来完成此操作
{
"dns": ["10.X.Y.Z"],
"dns-search": ["myorg.org"]
}
实际值将取决于您获得的输出。
您还需要更改代理设置并将它们应用到您的 docker 服务 drop-in 文件中。这可以按照以下线程
中列出的方式完成
(与 VonC 已经指出的相同)
我有一台装有 linux mint 18.3 的 VMware 机器(主机是 windows 10)。主机在代理后面。来宾机器 (linux mint) 网络配置为 "Bridged"?
我尝试在客户机 OS 上编写一个简单的 Dockerfile 并构建它,但 apt-get 命令有问题:
FROM ubuntu:xenial
RUN apt-get update && apt-get install -y \
bzip2 \
g++ \
make \
ncurses-dev \
wget \
zlib1g-dev
它给了我:
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease Temporary failure resolving 'security.ubuntu.com'
我尝试在 Dockerfile 中添加:
ENV http_proxy 'http://proxy_adress:3128'
ENV https_proxy 'http://proxy_adress:3128'
并收到此错误:
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease Temporary failure resolving 'proxy_adress'
我是否必须更改 VMware 配置中的某些内容?或者在 Dockerfile 中?
谢谢
在构建时不需要将 ENV
添加到您的 Dockerfile:在 docker 构建期间,唯一需要代理的是 docker 守护进程。
参见“Control Docker with systemd", especially the section "HTTP/HTTPS proxy”
/etc/systemd/system/docker.service.d/http-proxy.conf
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporatio
其次是:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Verify that the configuration has been loaded:
$ systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/
这将与dns服务器有关。
尝试将默认 dns 服务器设置为另一个服务器,例如 114.114.114.114:
sed -i 's/\(nameserver\) .*/ 114.114.114.114/' /etc/resolv.conf
您的容器似乎无法解析代理的主机名。因此,当您构建容器时,传递以下附加参数:
--dns=IP_ADDRESS...
这将执行此操作:
Sets the IP addresses added as nameserver lines to the container's /etc/resolv.conf file. Processes in the container, when confronted with a hostname not in /etc/hosts, will connect to these IP addresses on port 53 looking for name resolution services.
来源:https://docs.docker.com/v17.09/engine/userguide/networking/default_network/configure-dns/
我假设您在公司网络中,您需要进行两项更改。
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.X.Y.Z
search myorg.org
您需要在 docker 守护程序配置中设置这些。您可以通过创建一个包含以下内容
的文件/etc/docker/daemon.json
来完成此操作
{
"dns": ["10.X.Y.Z"],
"dns-search": ["myorg.org"]
}
实际值将取决于您获得的输出。
您还需要更改代理设置并将它们应用到您的 docker 服务 drop-in 文件中。这可以按照以下线程
中列出的方式完成