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 已经指出的相同)