Docker 컨테이너가 호스트를 ping할 수 없습니다.

Docker 컨테이너가 호스트를 ping할 수 없습니다.

나는 이 튜토리얼을 따르고 있다

https://docs.docker.com/articles/networking/# 컨테이너 간

다음 명령을 사용했습니다.

$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.0.160/24 dev bridge0
$ sudo ip link set dev bridge0 up

# Confirming that our bridge is up and running

$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
    link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.160/24 scope global bridge0
       valid_lft forever preferred_lft forever

# Tell Docker about it and restart (on Ubuntu)

$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker start

모든 컨테이너가 해당 범위 내에서 IP를 얻는 것을 볼 수 있으므로 제대로 작동하는 것 같습니다.

이제 3개의 컨테이너가 생겼습니다.

mysql 192.168.0.3
redis 192.168.0.5
webserver 192.168.0.6

이제 웹 서버에서 redis를 ping하면 작동합니다.

하지만 CMA가 호스트를 ping할 수 없으며 192.168.0.160대상 호스트를 복원할 수 없다고 표시됩니다.

정보

vagrant@ubuntu-docker-base:/mydocker/containers$ brctl show
bridge name bridge id       STP enabled interfaces
bridge0  8000.7e8945d   no  veth1a8b959
                            veth404a3b2
                            veth7959157
docker0     8000.5689799    no

컨테이너

root@286329032cd5:/# ip route
default via 192.168.0.160 dev eth0
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.5
root@286329032cd5:/# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.125 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.130 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.072 ms
^C
--- 192.168.0.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.072/0.109/0.130/0.026 ms
root@286329032cd5:/# ping 192.168.0.160
PING 192.168.0.160 (192.168.0.160) 56(84) bytes of data.
From 192.168.0.5 icmp_seq=1 Destination Host Unreachable
From 192.168.0.5 icmp_seq=2 Destination Host Unreachable
From 192.168.0.5 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.0.160 ping statistics ---
6 packets transmitted, 0 received, +3 errors, 100% packet loss, time 5032ms
pipe 3
root@286329032cd5:/#

답변1

Postfix 및 Apache 서버에 액세스하기 위해 Docker 컨테이너에서 해당 호스트로 연결하려는 비슷한 문제가 있었습니다.

호스트의 iptables에 이러한 규칙을 추가하는 것이 도움이 됩니다.

iptables -A INPUT -i docker0 -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -i docker0 -p tcp -m tcp --dport 80 -j ACCEPT

이전에는 포트가 열려 있었지만 docker0이 아닌 eth0 인터페이스에 대해서만 열려 있었습니다.)

답변2

매뉴얼에서:

Docker가 이미 실행 중이고 이전 docker0이 여전히 구성되어 있는 경우 먼저 서비스를 중지하고 인터페이스를 제거해야 할 수 있습니다.

# Stopping Docker and removing docker0

$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0

답변3

실행할 때 이 문제가 발생했습니다.안녕하세요 세계-nginx사진 출처:연 과학

아래와 같이 Docker 터미널에서 실행하면 Windows 브라우저에서 컨테이너 출력 HTML을 볼 수 있습니다.

docker run -p 80:80 hello-world-nginx

-p옵션은 VirtualBox의 포트 80을 컨테이너의 포트 80으로 전달합니다.

관련 정보