Cách lấy địa chỉ IP của vùng chứa docker đang chạy


94

Tôi đang sử dụng Docker cho Mac. Tôi đang chạy một microservice dựa trên nodejs trong vùng chứa Docker. Tôi muốn kiểm tra microservice của nút thông qua trình duyệt. Làm cách nào để lấy địa chỉ IP của vùng chứa docker đang chạy?


Câu trả lời:


115

Nếu bạn không muốn ánh xạ các cổng từ máy chủ của mình đến vùng chứa, bạn có thể truy cập trực tiếp vào ip dải của docker cho vùng chứa. Phạm vi này theo mặc định chỉ được truy cập từ máy chủ của bạn. Bạn có thể kiểm tra dữ liệu mạng vùng chứa của mình đang hoạt động:

docker inspect <containerNameOrId>

Có lẽ tốt hơn là nên lọc:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

Thông thường, dải ip mặc định của docker là 172.17.0.0/16. Máy chủ lưu trữ của bạn phải là 172.17.0.1và vùng chứa đầu tiên của bạn phải là 172.17.0.2nếu mọi thứ đều bình thường và bạn không chỉ định bất kỳ tùy chọn mạng đặc biệt nào.

CHỈNH SỬA Một cách khác thanh lịch hơn bằng cách sử dụng các tính năng của docker thay vì "bash lừa":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>

7
Bạn đang nói về IP nội bộ và nó không liên quan gì đến câu hỏi hiện tại. Câu trả lời của bạn chỉ cung cấp sự nhầm lẫn cho người đọc. Vì IP là IP của máy mà Docker đang chạy. Mà chỉ là localhost:)
David Gatti

Bạn sai rồi. OP không chỉ định bất cứ điều gì về microservice phải có thể truy cập từ bên ngoài. Anh ấy chỉ nói "thử nghiệm microservice nút thông qua trình duyệt" và điều này có thể được thực hiện bằng phương pháp đề xuất của tôi bằng cách sử dụng http://172.17.0.2:anyPorttừ máy chủ. Tất nhiên nếu bạn muốn truy cập nó bằng localhost trên máy chủ, bạn phải ánh xạ các cổng. Sẽ thấy những gì OP muốn.
OscarAkaElvis

3
Bạn đang nói rằng bạn có thể truy cập IP nội bộ bên trong Container từ máy chủ lưu trữ? Đó là điều không thể xảy ra về mặt vật lý, đó là một mạng hoàn toàn khác. Tôi không chỉ kiểm tra và có, tôi không thể truy cập 172.17.0.7 của vùng chứa docker của mình, sau đó tôi sẽ có thể thấy tất cả ứng cử viên docker nếu tôi quét máy chủ của mình bằng máy quét mạng và đây không phải là trường hợp lần nữa. Tôi biết rằng nó sẽ không hoạt động, tôi đã thử nghiệm những gì bạn nói (bạn không bao giờ biết) và nó không hoạt động. Vì vậy, có thể giải thích của bạn đang thiếu một phần quan trọng?
David Gatti

Các vùng chứa có thể truy cập được từ máy chủ. Hãy tự mình thử ... Tôi sẽ cho bạn một số gợi ý. 1. Tải xuống vùng chứa đang chạy: docker run --name struts --rm -i tomcat2. Lấy ip của vùng chứa của bạn (nếu bạn chỉ có một): docker inspect struts | grep '"IPAddress"' | head -n 13. Mở nó trên trình duyệt của máy chủ http://x.x.x.x:8080. Bạn có thể xem trang mặc định của Apache Tomcat.
OscarAkaElvis

1
Tôi đã không thể truy cập ứng dụng web trong container mà không có cổng lập bản đồ sử dụng -p
bilal.haider

22

Sử dụng --formattùy chọn để chỉ nhận địa chỉ IP thay vì toàn bộ thông tin vùng chứa:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
Trong máy chủ windows sử dụng dấu ngoặc kép thay vì dấu nháy đơn. Ví dụ: sudo Docker kiểm tra --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID hoặc TÊN> Tham khảo: liên kết
Vineet Sajwan

1
định dạng thông tin mới về vùng chứa tại đây
Igor

18

Đối với các công cụ docker hiện đại, hãy sử dụng lệnh này:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

và đối với động cơ cũ hơn, sử dụng:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

Như đã đề cập và được liên kết trong nhận xét của @sanyash up trong khu vực OP ban đầu.
Jesse Chisholm

Lỗi phân tích cú pháp mẫu: mẫu:: 1: hành động không mong muốn không được đóng trong lệnh
gmlvsv

11

nếu bạn muốn lấy nó ngay trong vùng chứa, bạn có thể thử

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17

5

Bạn có thể bắt đầu vùng chứa của mình bằng cờ -P. Điều này "gán" một cổng ngẫu nhiên cho cổng tiếp xúc của hình ảnh của bạn.

Với docker port <container id>bạn có thể thấy cổng chọn ngẫu nhiên. Sau đó có thể truy cập thông qua localhost:port.


2

Đối với trường hợp của tôi, bên dưới đã hoạt động trên Mac :

Tôi không thể truy cập IP vùng chứa trực tiếp trên Mac. Tôi cần sử dụng localhostvới chuyển tiếp cổng, ví dụ: nếu cổng là 8000, thìhttp://localhost:8000

Xem https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-case-and-workarounds

Câu trả lời ban đầu là từ: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949


-2

Bạn không thể truy cập IP của docker từ bên ngoài máy chủ đó. Nếu trình duyệt của bạn nằm trên một máy khác, tốt hơn nên ánh xạ cổng máy chủ tới cổng vùng chứa bằng cách chuyển -p 8080:8080lệnh chạy.

Chuyển -pbạn có thể ánh xạ cổng máy chủ tới cổng container và một proxy được đặt để chuyển tiếp tất cả các traffix cho cổng máy chủ đó đến cổng container được chỉ định.

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.