Mac 용 Docker 베타를 사용하는 컨테이너의 IP 번호는 무엇입니까?


28

이전에는 Docker 툴킷을 사용하고 있었고 docker-machine inspect <machine-name>컨테이너 내에서 제공되는 페이지를보기 위해 docker 시스템의 IP를 찾는 데 사용할 수있었습니다 .

도커 베타 클라이언트 (Mac 용)로 업그레이드했으며 페이지가 제공되는 위치를 찾을 수 없습니다.

도커 머신이 아닌 도커 순수이기 때문에 localhost에서 노출 된 포트를 볼 수 있다고 가정합니다. 그러나 그들은 열려 있지 않습니다. kitematic을 통해서도 노출 된 포트 (80)를 탐색하지만 아무것도 볼 수 없습니다.

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

172.17.0.2는 실제로 컨테이너의 IP입니까? 그렇지 않은 경우 IP가 무엇인지 어디에서 찾을 수 있습니까? 아니면 포트 매핑 문제가 있습니까?

답변:


25

컨테이너 내부의 IP 주소는 172.17.0.2이며 Docker 컨테이너의 "내부"와 그 사이에만 존재합니다.

연결하려는 IP 주소는 호스트 시스템 IP 주소입니다. Mac에서 ifconfig를 수행하고 올바른 것을 찾으십시오 (일반적으로 192.168.xy 또는 10.xyz). 로컬 호스트는 컨테이너 외부에서도 작동해야합니다.


5
누가 이것을 다운 보트했는지 확실하지 않지만 실제로는 정답입니다. Docker for Mac을 사용하면 더 이상 별도의 시스템 IP 주소를 가진 중간 VM이 없습니다. IP 또는 로컬 호스트를 통해 호스트를 종료하면 포트가 올바르게 매핑되어있는 한 요청을 컨테이너로 전달해야합니다.
DNJohnson

감사. 왜 이것이 다운 투트 (2 번)되었는지 혼란 스러웠습니다. 어쩌면 실제 대답하기에는 너무 단순 해 보일 수도 있습니다.
Mikael Kjær

나는 이것을 공감하지 않았다. 그러나 어떤 이유로 든이 간단한 답변이 작동하지 않거나 작동하지 않는 사용자 하위 집합이 있다고 생각합니다. 올바른 것으로 표시하고 있습니다.
Synesso

2
여기서 흥미로운 점은 OS X에서 화면 명령을 통해 xHyve VM으로 이동하고 curl localhost : 8080을 실행 하면 컨테이너 중 하나에서 응답을 얻는 것입니다. 그러나 OS X 터미널에서 동일한 작업을 수행하면 연결이 거부됩니다. 어떻게 이런 일이 일어날 수 있습니까?
mvmn

1
PS 이것은 docker-compose를 통해 생성 된 컨테이너에 발생했습니다.
mvmn

8

다음 명령을 입력하면 docker container ip가 나타납니다.

$docker inspect <docker-container-name>

아래로 스크롤하면 " NetworkSettings " 아래에 IP 주소가 표시됩니다


고맙습니다. 나는 이것을 시도했지만 작동하지 않았다고 언급하지 않았다. 내 질문이 업데이트되었습니다.
Synesso

그렇습니다, 그러나 당신은 그것을 핑할 수 없습니다. 이것이 위의 정답이 다운 투표 된 이유라고 생각합니다. 내가 남긴 질문은 가상 호스트의 네트워크에 브리지하는 방법이 있는지 여부입니다. 가상 호스트는 MacOS에 더 잘 통합되어 있으면 여전히 거기에 있으며, IP 주소를 ping 할 수 있다고 확신하지만 해당 네트워크에 브리지하여 Mac에서 로컬로 사용할 수 있습니까?
Gerry Gleason

6

Mac 용 Docker는 IP 주소 127.0.0.1에서 실행됩니다.


그것은 전적으로 잘못된 진술이 아닙니다 : P
jonas

사실 이것은 내 문제를 해결 한 가장 간단한 대답이었습니다.
James

1

ip 주소는의 출력에서 ​​명시 적으로 언급됩니다 docker ps.

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

또한, localhost동일하지 않습니다0.0.0.0


5
0.0.0.0은 현재 컴퓨터의 모든 IP 주소를 의미하며 일반적으로 연결하지 않고 청취 할 때 사용됩니다. 위 컬이 어떻게 작동하는지 이해하지 못합니다.
Mikael Kjær

2
0.0.0.0은 서비스가 컨테이너에 바인딩 된 IP 주소이며이를 실행하는 호스트의 컨텍스트에는 아무 의미가 없습니다. PORTS 열의 출력은 컨테이너의 포트 80 (0.0.0.0:80)이 포트 80 (tcp) 및 포트 443 (로컬)에 로컬로 매핑되었다고 말합니다.
Kevin

1
아니요, 동일하지는 않지만 0.0.0.0은 IP 주소가 아니며 localhost를 포함하여 모두 원한다는 것을 듣는 신호입니다. 서비스가 특정 IP (로컬 호스트 또는 외부 IP)에 바인딩되어 있지 않으면 연결 컨텍스트에서 동일합니다.
Gerry Gleason

0

127.0.0.1은 localhost 용이라고 생각합니다.

Mac에서 실행되는 도커 ID를 얻으려면. 터미널에서 "ifconfig"를 실행하면 127.0.0.1 이외의 결과가 나타납니다.

대부분 192.168.xy와 같은 것

도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.