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?
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:
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.1
và vùng chứa đầu tiên của bạn phải là 172.17.0.2
nế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>
localhost
:)
http://172.17.0.2:anyPort
từ 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.
docker run --name struts --rm -i tomcat
2. 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 1
3. 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.
Sử dụng --format
tù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>
Đố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
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
Đố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 localhost
vớ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
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:8080
lệnh chạy.
Chuyển -p
bạ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.