我让它正常工作,但现在它停了。我尝试了以下命令,但没有效果:

Docker运行-dns 8.8.8.8 base ping google.com

Docker运行base ping google.com

Sysctl -w net.ipv4。Ip_forward =1 -在主机和容器上

我得到的是未知主机google.com。Docker 0.7.0版本

什么好主意吗?

P.S. ufw也被禁用了


当前回答

我使用DOCKER_OPTS="——dns 8.8.8.8",后来发现我的容器不能直接访问互联网,但可以访问我的公司内部网。我把DOCKER_OPTS改为如下:

DOCKER_OPTS="--dns <internal_corporate_dns_address"

替换internal_corporate_dns_address与我们的DNS的IP地址或FQDN和重启docker使用

sudo service docker restart

然后生成我的容器并检查它是否可以访问互联网。

其他回答

对我来说,是主机的防火墙。我必须在主机的防火墙上允许DNS。并且在更改主机防火墙设置后不得不重新启动docker。

在分角上, 我的问题是,在启动docker服务之前,我没有安装并启动iptables。在启动docker服务之前,请确保iptables服务已启动并运行。

唯一能在我的电脑上工作的东西(8.8.8.8不起作用)

找出本地机器中使用的DNS:

$ netstat -ntpl | grep :53
tcp        0      0 10.194.128.1:53         0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.2.1:53            0.0.0.0:*               LISTEN      -

修改docker配置sudo vim /etc/docker/daemon.Json基于上述信息在您自己的计算机上

{
  "dns": ["192.168.122.1","10.194.128.1"]
}

重启码头工人

sudo ip link delete docker0
sudo systemctl restart docker

为子孙后代分享一个简单而有效的解决方案。当我们运行docker容器时,没有显式地提到——network标志,它连接到它的默认网桥网络,这禁止连接到外部世界。为了解决这个问题,我们必须创建自己的网桥网络(用户定义的网桥),并且必须使用docker run命令显式地提到它。

docker network create --driver bridge mynetwork
docker run -it --network mynetwork image:version

当我的一个容器随机发生这种情况,而其他容器都很好时,我被难住了。容器至少连接到一个非内部网络,因此Compose定义没有任何问题。重启VM / docker守护进程没有帮助。这也不是DNS问题,因为容器甚至不能ping外部IP。为我解决这个问题的是重新创建docker网络。在我的例子中,docker-compose down && docker-compose up工作。

组成

这迫使我们重新构建所有容器的网络:

Docker-compose down && Docker-compose up

群模式

我认为你只是删除并重新创建服务,这将重新创建服务的网络:

Docker服务rm some-service

Docker服务创建…

如果容器的网络是外部的

只需删除并重新创建该服务的外部网络:

Docker网络rm some-external-network

Docker网络创建一些外部网络