Số IP của người chứa của tôi khi sử dụng Docker beta cho mac là gì?


28

Trước đây tôi đã sử dụng bộ công cụ Docker và có thể sử dụng docker-machine inspect <machine-name>để tìm IP của máy docker, để xem các trang được phục vụ bởi container bên trong.

Tôi đã nâng cấp lên máy khách beta docker (cho mac) và không thể tìm thấy nơi các trang đang được phục vụ.

Tôi giả sử vì nó là docker thuần túy và không phải là docker-machine Tôi sẽ thấy các cổng bị lộ trên localhost. Nhưng họ không mở. Ngay cả thông qua kitical tôi điều hướng đến cổng tiếp xúc (80) nhưng không thấy gì.

$ 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

Là 172.17.0.2 thực sự là IP của container của tôi? Nếu không, tôi có thể tìm thấy IP ở đâu? Hoặc tôi có một vấn đề ánh xạ cổng?

Câu trả lời:


25

Bạn đang xem địa chỉ IP bên trong container là 172.17.0.2 và chỉ tồn tại "bên trong" các container docker (và giữa chúng).

Địa chỉ IP bạn muốn kết nối là địa chỉ IP của máy chủ. Thực hiện ifconfig trên máy Mac của bạn và tìm đúng (thường là 192.168.xy hoặc 10.xyz). Localhost cũng nên hoạt động từ bên ngoài container.


5
Không chắc ai đã đánh giá thấp điều này nhưng thực sự đó là câu trả lời chính xác. Với Docker cho Mac, không còn VM trung gian với địa chỉ IP máy riêng biệt. Đánh vào máy chủ (thông qua IP hoặc localhost) sẽ chuyển tiếp các yêu cầu đến vùng chứa miễn là các cổng được ánh xạ chính xác.
DNJohnson

Cảm ơn. Tôi đã bối rối tại sao điều này đã bị hạ cấp (hai lần). Có lẽ bởi vì nó chỉ có vẻ quá đơn giản để là câu trả lời thực tế.
Mikael Kjær

Tôi đã không downvote này. Nhưng tôi nghi ngờ có một tập hợp người dùng, vì lý do nào, câu trả lời đơn giản này không (hoặc không) hoạt động. Tôi đang đánh dấu là chính xác.
Synesso

2
Vâng, đây là một điều thú vị - trên OS X khi tôi truy cập VM xHyve của mình thông qua lệnh màn hình và chạy curl localhost: 8080 - Tôi nhận được phản hồi từ một trong các container. Nhưng nếu tôi làm tương tự trong thiết bị đầu cuối OS X - kết nối bị từ chối. Làm thế nào điều này có thể xảy ra?
mvmn

1
PS Điều này đã xảy ra với một container được tạo thông qua docker-compose.
mvmn

8

gõ lệnh sau và bạn sẽ nhận được ip container docker của bạn

$docker inspect <docker-container-name>

Cuộn xuống và bạn sẽ nhận được địa chỉ IP trong " Cài đặt mạng "


Cảm ơn bạn. Tôi đã bỏ qua việc đề cập rằng tôi đã thử điều này và nó đã không hoạt động. Câu hỏi của tôi đã được cập nhật.
Synesso

Phải, nhưng bạn không thể ping nó. Tôi nghi ngờ rằng đây là lý do tại sao câu trả lời đúng ở trên bị bỏ qua. Câu hỏi tôi còn lại là liệu có cách nào để kết nối với mạng trên máy chủ ảo hay không. Máy chủ ảo vẫn ở đó nếu được tích hợp tốt hơn vào MacOS và tôi chắc chắn rằng bạn có thể ping các địa chỉ IP này từ đó, nhưng tôi không thể kết nối với mạng đó để chúng có sẵn cục bộ trên máy Mac?
Gerry Gl lý

6

Docker cho Mac chạy trên địa chỉ IP 127.0.0.1


đó không hoàn toàn là một tuyên bố sai: P
jonas

Trong thực tế, đây là câu trả lời đơn giản nhất đã giải quyết vấn đề của tôi.
James

1

Địa chỉ IP được đề cập rõ ràng trong đầu ra 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"}

Hơn nữa, localhostkhông giống như0.0.0.0


5
0.0.0.0 có nghĩa là tất cả các địa chỉ IP trên máy hiện tại và thường được sử dụng khi nghe, không kết nối. Tôi không hiểu làm thế nào các curl ở trên thậm chí sẽ làm việc.
Mikael Kjær

2
0.0.0.0 là địa chỉ IP mà dịch vụ được liên kết trong vùng chứa và có nghĩa là không có gì trong ngữ cảnh của máy chủ đang chạy nó. đầu ra dưới cột PORTS nói rằng cổng 80 của container (0.0.0.0:80) được ánh xạ tới cổng 80 cục bộ (80 / tcp), cũng như cổng 443 cục bộ.
Kevin

1
Không, nó không giống nhau, nhưng như đã chỉ ra, 0.0.0.0 không phải là địa chỉ IP, đó là một tín hiệu để nghe rằng tôi muốn tất cả chúng bao gồm cả localhost. Trong bối cảnh kết nối, chúng giống nhau trừ khi dịch vụ được liên kết với một IP cụ thể (localhost hoặc IP bên ngoài).
Gerry Gl lý

0

Tôi tin rằng 127.0.0.1 là dành cho localhost.

Để lấy id docker chạy trên máy Mac của bạn. Chạy "ifconfig" trong thiết bị đầu cuối và sẽ có kết quả bên cạnh 127.0.0.1

Chủ yếu là một cái gì đó như 192.168.xy

Hy vọng nó giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.