在 docker build 的过程中 apt-get 一直无法 resolve archive.ubuntu.com,一开始以为是 dns 的问题,故做了如下的尝试

  • 设置 /etc/default/docker 中的 DOCKER_OPTS,但实践证明,不要轻易改动,容易导致 service docker restart 起不起来
  • 设置 /etc/docker/daemon.json,加入“DNS”配置,实践证明并不 work
  • 设置 /etc/resolv.conf 中的 nameserver,实践证明并不 work

后来发现,并不是 dns 的问题,因为

  • docker run busybox ping -c 1 111.13.101.208(百度 IP),无法 ping 通
  • docker run --network host busybox ping -c 1 111.13.101.208 可以 ping 通

所以,归结下来,是 docker bridge 无法访问外网。临时方案,可以用以下方式解决

  • docker run –net/–network host
  • docker build –network host
  • 编辑 /etc/ufw/before.rules,在 *filter 前加上
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
  • 执行
sudo ufw reload
或者
sudo ufw disable
sudo ufw enable
  • 编辑 /etc/default/ufw,设置 DEFAULT_FORWARD_POLICY="ACCEPT"
  • sudo ufw allow 2375/tcp
  • sudo ufw reload