我的码头集装箱没有互联网

时间:2013-12-06 17:51:37

标签: docker

我让它工作正常,但现在停止了。我尝试了以下命令但无济于事:

docker run -dns 8.8.8.8 base ping google.com

docker run base ping google.com

sysctl -w net.ipv4.ip_forward=1 - 在主机和容器上

我得到的只是unknown host google.com。 Docker版本0.7.0

有什么想法吗?

P.S。 ufw也已停用

24 个答案:

答案 0 :(得分:58)

通过遵循以下建议修复:

  

[...]你可以尝试重置一切吗?

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
  

它将强制docker重新创建网桥并重新启动所有网络规则

https://github.com/dotcloud/docker/issues/866#issuecomment-19218300

似乎界面被“绞死”了。

更新最新版本的docker:

上面的答案可能仍然可以为你完成工作,但是已经有很长一段时间了,因为这个答案已经发布,而且码头工具现在更加精致,所以请确保先使用iptables进行修改和所有。

sudo service docker restart或(如果您使用的是不使用暴发的Linux发行版)sudo systemctl restart docker

答案 1 :(得分:52)

重启docker的目的不是手动执行,而是使用service或init命令:

service docker restart

答案 2 :(得分:19)

使用OSX的答案(使用Docker Machine)更新此问题

如果您使用Docker Machine在OSX上运行Docker,那么以下内容对我有用:

docker-machine restart

<...wait for it to restart, which takes up to a minute...>

docker-machine env
eval $(docker-machine env)

然后(至少根据我的经验),如果你从一个容器ping google.com一切都会好的。

答案 3 :(得分:6)

我正在使用DOCKER_OPTS="--dns 8.8.8.8"后来发现并且我的容器没有直接访问互联网但可以访问我的企业内部网。我将DOCKER_OPTS更改为以下内容:

DOCKER_OPTS="--dns <internal_corporate_dns_address"

使用我们的DNS的IP地址或FQDN替换internal_corporate_dns_address并使用

重启docker
sudo service docker restart

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

答案 4 :(得分:4)

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

答案 5 :(得分:4)

对我来说,我的问题是因为未安装iptables-services,这对我有用(CentOS):

sudo yum install iptables-services
sudo service docker restart

答案 6 :(得分:3)

对我来说这是一个iptables转发规则。由于某种原因,以下规则与docker的iptables规则相结合,导致所有来自容器的出站流量都达到localhost:8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

答案 7 :(得分:3)

我在Ubuntu 18.04上遇到了问题。但问题出在DNS上。我在一个拥有自己的DNS服务器并阻止其他DNS服务器的企业网络中。这是为了阻止一些网站(色情,种子,等等)

解决您的问题

    主机上的
  1. find your DNS
  2. 按建议使用--dns your_dns 通过@jobin

    docker run --dns your_dns -it --name cowsay --hostname cowsay debian bash

答案 8 :(得分:2)

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

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

答案 9 :(得分:2)

您可能已使用dns选项Speech.Listener()

启动了泊坞窗

我遇到了同样的错误,并从--dns 172.x.x.x

中删除了选项

行:

/etc/default/docker

答案 10 :(得分:2)

在Windows(8.1)上我杀了虚拟机界面(通过taskmgr),它解决了这个问题。

答案 11 :(得分:2)

缺少代理设置也可能导致无法访问互联网。在这种情况下,--network host可能也不起作用。可以通过设置环境变量http_proxyhttps_proxy

来配置代理
docker run -e "http_proxy=YOUR-PROXY" \
           -e "https_proxy=YOUR-PROXY"\
           -e "no_proxy=localhost,127.0.0.1" ... 

不要忘记设置no_proxy,或者所有请求(包括那些到localhost的请求)将通过代理。

更多信息:Archlinux Wiki中的Proxy Settings

答案 12 :(得分:2)

我不知道自己在做什么,但是对我有用:

Select  AllData.*,
        earliest.mismatch
from    #mytable    AllData
    left join
        (Select NAME, 
                min(date) mismatch
        from    #mytable
        where   [ts] <> [TO]
        group by
                NAME) earliest         on AllData.Name = earliest.Name

答案 13 :(得分:1)

当我一个容器随机发生这种情况时,我感到很沮丧,而另一个容器还不错。容器已连接到至少一个非内部网络,因此Compose定义没有任何问题。重新启动VM / docker守护程序无济于事。这也不是DNS问题,因为容器甚至无法ping外部IP。为我解决的是重新创建docker网络。就我而言,docker-compose down && docker-compose up有效。

撰写

这迫使重新创建所有容器的所有网络:

docker-compose down && docker-compose up

群体模式

我想您只是删除并重新创建了服务,从而重新创建了服务的网络:

docker service rm some-service

docker service create ...

如果容器的网络是外部网络

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

docker network rm some-external-network

docker network create some-external-network

答案 14 :(得分:1)

对我而言,使用centos 7.4,它不是/etc/resolve.conf、iptables、iptables nat规则或docker本身的问题。问题是主机缺少包bridge-utils的软件包,码头工人需要使用brctl命令来构建桥。 yum install -y bridge-utils并重新启动docker,解决问题。

答案 15 :(得分:1)

最初我的docker容器能够访问外部互联网(这是在Amazon EC2上运行的docker服务/容器)。

由于我的应用程序是一个API,我跟进了我的容器的创建(它成功地拉动了所需的所有包),并更新了我的IP表,以便将所有流量从端口80路由到我的API(运行在码头工人正在听。

然后,当我尝试重建容器时,它失败了。经过多次努力,我发现我之前的步骤(设置IPTable端口转发规则)搞砸了docker的外部网络功能。

解决方案:停止您的IPTable服务:

sudo service iptables stop

重启Docker守护程序:

sudo service docker restart

然后,尝试重建容器。希望这会有所帮助。

跟进

我完全忽略了我不需要乱用IP表来将传入的流量转发到80运行在docker上运行的API的端口。相反,我只是将端口80别名到docker中运行的API的端口:

docker run -d -p 80:<api_port> <image>:<tag> <command to start api>

答案 16 :(得分:1)

如果您使用的是OSX,则可能需要在安装Docker后重新启动计算机。这有时是一个问题。

答案 17 :(得分:0)

在尝试在Ubuntu上使用Docker-Compose设置项目时,我也遇到了这样的问题。

当我尝试ping任何IP地址或nslookup一些URL时,Docker根本无法访问互联网。

我尝试了上述所有可能的DNS解析解决方案,但均无济于事。

我整天试图找出到底发生了什么,最后发现造成所有麻烦的原因是防病毒软件,特别是防火墙,由于某种原因,防火墙阻止了Docker获取IP地址和港口。

当我禁用它时-一切正常。

因此,如果您安装了防病毒软件,却无济于事,则可能是该防病毒软件的防火墙。

答案 18 :(得分:0)

最近几天我遇到了类似的问题。对我来说,原因是systemd,docker和我的托管服务提供商的结合。我正在运行最新的CentOS(7.7.1908)。

我的托管服务提供商会自动为systemd-networkd生成一个配置文件。从systemd 219(它是CentOS 7的当前版本)开始,systemd-networkd控制了与网络相关的sysctl参数。 Docker似乎与此版本不兼容,并且每次启动容器时都会重置IP转发标志。

我的解决方案是在提供商提供的配置文件的IPForward=true部分中添加[Network]。该文件可能位于多个位置,最可能位于/etc/systemd/network中。

该过程也在官方docker文档中进行了描述:https://docs.docker.com/v17.09/engine/installation/linux/linux-postinstall/#ip-forwarding-problems

答案 19 :(得分:0)

对于使用openconnect 8.3 for VPN的Ubuntu 19.04,我不得不将/etc/resolve.conf符号链接到systemd中的一个(与wisbucky对应的答案)

sudo ln -sf /etc/resolv.conf /run/systemd/resolve/resolv.conf

调试步骤

  1. 连接到公司VPN
  2. 在/etc/resolv.conf或/run/systemd/resolve/resolv.conf中寻找正确的VPN设置
  3. 具有正确的DNS设置,我们会将其符号链接到其他文件 (提示:将一个设置正确的文件放在作业的左侧)

Docker版本:Docker版本19.03.0-rc2,构建f97efcc

答案 20 :(得分:0)

只需在此处添加它,以防有人在运行docker的virtualbox容器中遇到此问题。我将virtualbox网络重新配置为桥接,而不是nat,问题消失了。

答案 21 :(得分:0)

就跑

sudo apt install bridge-utils

答案 22 :(得分:0)

已经有很多好的答案了。我最近在运行 armbian 的橙色 pi 电脑中遇到了类似的问题。 Docker 容器被阻止访问互联网。这个命令解决了我的问题。所以我喜欢分享它

docker run --security-opt seccomp=unconfined imageName

答案 23 :(得分:0)

尝试了所有答案,没有一个对我有用。

在尝试了我能找到的所有其他方法几个小时后,这成功了:

reboot

-_-