Cách lấy địa chỉ IP của Docker chứa từ máy chủ


1411

Có lệnh nào tôi có thể chạy để lấy địa chỉ IP của bộ chứa ngay từ máy chủ sau khi bộ chứa mới được tạo không?

Về cơ bản, một khi Docker tạo ra container, tôi muốn cuộn các kịch bản cấu hình chứa và triển khai mã của riêng mình.


28
Tôi chỉ muốn đảm bảo rằng các noobs khác không phạm sai lầm của tôi và cố gắng lấy IP từ hình ảnh thay vì container. Đảm bảo bạn nhận được CID hoặc id container và truy vấn đó; CID thông qua 'docker ps' đó là.
Paul Gregoire

Làm thế nào để có được ngược lại? IP máy chủ hoặc cuộc gọi từ container?
Somnath Muluk

Câu trả lời:


2329

Các --formattùy chọn inspectđến để giải cứu.

Cú pháp máy khách Docker hiện đại là:

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

Cú pháp máy khách Docker cũ là:

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

Các lệnh này sẽ trả về địa chỉ IP của Docker.

Như đã đề cập trong các bình luận: nếu bạn đang ở trên Windows, hãy sử dụng dấu ngoặc kép "thay vì dấu ngoặc đơn 'xung quanh dấu ngoặc nhọn.


34
Đây là một giải pháp tốt hơn nhiều. Chỉ yêu cầu những gì bạn cần, nếu có thể!
MikeyB

8
Hừm. Nhận <no value>phản hồi trên máy Mac bằng Fig / Boot2Docker
cevaris

2
@cevaris Bạn sẽ nhận được <no value>nếu bạn cố chạy cái này với một container không chạy. Hãy chắc chắn rằng container của bạn đang chạy trước khi bạn làm điều này.
TheJediCowboy

55
!CẢNH BÁO! Điều này không còn hoạt động nữa. Các định dạng mới là cụ thể cho container và theo mẫu {{ .NetworkSettings.Networks.$network.IPAddress }}. Mặc định có vẻ là cầu nối, nhưng trong phần soạn thảo docker, đây sẽ là một tên cụ thể phụ thuộc vào tên ứng dụng của bạn (tôi nghĩ từ cờ --project-name, mặc dù điều đó cũng sẽ phụ thuộc vào loại cấu hình mạng bạn đã thiết lập). Tôi đã viết một câu trả lời đầy đủ trong một câu trả lời ở đây stackoverflow.com/questions/17157721/ cấp
Dunk

5
Có thể tôi là một con cừu buồn ngủ, nhưng lời cảnh báo về dấu ngoặc kép không đậm và đủ mờ để thu hút sự chú ý của tôi. Có thể cung cấp hai ví dụ được dán nhãn rõ ràng Linux và Windows. Tôi thực sự chỉ cần gõ ví dụ, kiểm tra các tài liệu cũng sử dụng dấu ngoặc đơn và sau đó đã xử lý lỗi. Tôi chắc chắn tôi không cô đơn.
Wyck

513

Bạn có thể sử dụng docker inspect <container id>.

Ví dụ:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID

67
Để giải nén ip, bạn có thể làm một cái gì đó như thế docker inspect $CID | grep IPAddress | cut -d '"' -f 4, nó hoạt động tốt :)
creack

9
Kết hợp tất cả lại với nhau, bí danh shell này sẽ liệt kê tất cả các id container và ips của chúng:alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
ko-dos

64
Như được đề cập bởi @ user3119830, có một tùy chọn mới để kiểm tra. Bây giờ, bạn có thể nhận được Ip dễ dàng hơn vớidocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack

16
Chỉ cần một lưu ý. Các tùy chọn dấu gạch ngang đơn không được chấp nhận để -format sẽ trở thành --format.
jamtur01

7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}là cú pháp mới. -formatbị phản đối, nó trở thành --format.
Devy

408

Đầu tiên lấy ID container:

docker ps

(Cột đầu tiên dành cho ID container)

Sử dụng ID container để chạy:

docker inspect <container ID>

Ở phía dưới, bên dưới "Cài đặt mạng", bạn có thể tìm thấy "IPAddress"

Hoặc chỉ cần làm:

docker inspect <container id> | grep "IPAddress"

5
Quá tệ, trên một trong những trường hợp của tôi (bắt đầu bằng docker run -it MYCONTAINER /bin/bash), đầu ra của inspectkhông có phần NetworkSettings!
Eric

3
Điều này không hoạt động trên Windows 10. Bạn cũng cần tìm ra địa chỉ IP của DockerNAT với ipconfig.
ntiedt

@Eric Bạn cũng có thể kiểm tra cầu nối mạng cho điều đó:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński

5
Tôi rất thích ... | grep IPgiải pháp cho tất cả các chi tiết định dạng cần thiết để có IP. +1
d8aninja

1
@Eric - bạn đã nhầm lẫn container với hình ảnh . Lệnh này thực sự docker run -it MYIMAGE(đó không phải là tên container ); nếu bạn làm docker inspect MYIMAGEbạn sẽ nhận được thông tin tĩnh về hình ảnh . Bạn cần tìm tên của container đang chạy (hoặc sử dụng id của nó như những người khác đề xuất). Trên hệ thống của tôi, thùng chứa đầu tiên như vậy được tạo từ hình ảnh đó mặc định đặt tên MYIMAGE_1, docker inspect MYIMAGE_1NetworkSinstall cũng vậy .
ToolmakerSteve

216
docker inspect CONTAINER_ID | grep "IPAddress"

Bạn có thể thêm -ivào grep để bỏ qua trường hợp sau đó ngay cả những điều sau đây sẽ hoạt động:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

5
Làm thế nào là câu trả lời này tốt hơn / khác với 22 khác?
sds

Đây chắc chắn không phải là câu trả lời tốt nhất. Câu trả lời của WouterD là câu trả lời bạn đang tìm kiếm.
M.Vanderlee

7
@ M.Vanderlee câu trả lời này có một lệnh dễ nhớ hơn, điều này làm cho nó trả lời tốt hơn IMO.
huysentbeanw

1
@WouterHuysentbean Chắc chắn, nhưng bạn nhận được nhiều mục và văn bản "IPAddress" thực tế. Bạn không thể sử dụng nó trong một kịch bản mà không cần thao tác thêm.
M.Vanderlee

Bạn đúng. Trong bối cảnh của câu hỏi, câu trả lời khác phù hợp hơn.
huysentbeanw

133

Để có được tất cả các tên container và địa chỉ IP của chúng chỉ bằng một lệnh duy nhất.

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

Nếu bạn đang sử dụng docker-composelệnh sẽ là:

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Đầu ra sẽ là:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2

5
Tôi thực sự thích điều này nhưng nó cũng không hoạt động cho Docker Compose, một cái gì đó để làm với mạng riêng của họ. Thay vào đó đổi {{.NetworkSettings.IPAddress }}thành{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek

Đây là biến thể tôi sử dụng : docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. Loại sed(1)bỏ các dòng trống cho các container hiện diện, nhưng không có địa chỉ IP.
NYCeyes

97

Thêm tập lệnh shell này trong ~/.bashrctập tin của bạn hoặc có liên quan:

docker-ip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

Sau đó, để có được địa chỉ IP của một container, chỉ cần làm điều này:

docker-ip YOUR_CONTAINER_ID

Đối với phiên bản mới của Docker, vui lòng sử dụng như sau:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
saiyancoder

cái này hiệu quả với tôi, nhưng cần phảisource ~/.bash_profile
penny chan

1
Bạn sẽ gặp lỗi này nếu bạn không kiểm tra một container đang chạy, nhưng chỉ là một hình ảnh ... một hình ảnh không có IPAddress ... thông báo lỗi khủng khiếp, vâng
dagelf 31/03/19

37

Hiển thị tất cả địa chỉ IP của người chứa:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

37

Trong Docker 1.3+, bạn cũng có thể kiểm tra nó bằng cách sử dụng:

Nhập Docker đang chạy (Linux):

docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql

Cho cửa sổ:

docker exec [container-id or container-name] ipconfig

1
hoặc chỉdocker exec [container-name-or-id] ip a
Stephan Richter

cho các cửa sổdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz

27

Kể từ phiên bản Docker 1.10.3, hãy xây dựng 20f81dd

Trừ khi bạn nói với Docker nếu không, Docker luôn khởi chạy các container của bạn trong mạng cầu. Vì vậy, bạn có thể thử lệnh này dưới đây:

docker network inspect bridge

Sau đó sẽ trả về phần Container sẽ hiển thị địa chỉ IP cho vùng chứa đang chạy đó.

[
    {
        "Name": "bridge",
        "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
                "Name": "drunk_leavitt",
                "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Điều đó có nghĩa là gì nếu phần container của bạn trống? Tuy nhiên, container đang hoạt động.
StackEdd

24

Hành hình:

docker ps -a

Điều này sẽ hiển thị hình ảnh docker hoạt động:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

Sử dụng giá trị ID CONTAINER:

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172,17.0.2"


23

Dựa trên một số câu trả lời tôi yêu thích, tôi quyết định hợp nhất chúng thành một hàm để lấy tất cả các địa chỉ IP và một địa chỉ khác cho một vùng chứa cụ thể. Bây giờ họ đang ở trong .bashrctập tin của tôi .

docker-ips() {
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

docker-ip() {
  docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

Lệnh đầu tiên cung cấp địa chỉ IP của tất cả các container và thứ hai là địa chỉ IP của một container cụ thể.

docker-ips
docker-ip YOUR_CONTAINER_ID

16

Container tham chiếu theo tên:

docker run ... --name pg-master

Sau đó lấy địa chỉ IP theo tên:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)

15

Tôi đã viết tập lệnh Bash sau để lấy bảng địa chỉ IP từ tất cả các container đang chạy bên dưới docker-compose.

function docker_container_names() {
    docker ps -a --format "{{.Names}}" | xargs
}

# Get the IP address of a particular container
dip() {
    local network
    network='YOUR-NETWORK-HERE'
    docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@"
}

dipall() {
    for container_name in $(docker_container_names);
    do
        local container_ip=$(dip $container_name)
        if [[ -n "$container_ip" ]]; then
            echo $(dip $container_name) " $container_name"
        fi
    done | sort -t . -k 3,3n -k 4,4n
}

Bạn nên thay đổi mạng biến thành tên mạng của riêng bạn.


1
Tường Lê trả lời từ đây stackoverflow.com/questions/17157721/ Không tránh việc chỉ định mạng trong dip (): docker tests --format '{{phạm vi .NetworkSinstall.Networks}} {{. IPAddress}} {{end} } '"$ @"
JoanComasFdz

1
@JoanComasFdz bạn đã cứu tôi cảm ơn rất nhiều!
Chagai Friedlander

14

Đây là một câu trả lời nhanh chóng:

Nhận tên hoặc ID container của bạn:

docker container ls

Sau đó lấy IP:

docker inspect <container_ID Or container_name> |grep 'IPAddress'

Nhận cổng:

docker inspect <container_ID Or container_name> |grep 'Port'

13

Docker được viết bằng Go và nó cũng sử dụng cú pháp Go cho mục đích truy vấn.

Để kiểm tra địa chỉ IP của một container cụ thể, bạn cần chạy lệnh ( -fcho "định dạng"):

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

Đối với ID hoặc tên container, bạn có thể chạy lệnh

docker container ls

trong đó sẽ liệt kê mọi container đang chạy.


1
Điều này rất hữu ích. Tôi có thể tìm tài liệu ở đâu để viết các truy vấn Go của riêng mình?
Michael Hoffmann

12

Đây là một giải pháp mà tôi đã phát triển ngày nay trong Python, sử dụng docker inspect containerđầu ra JSON làm nguồn dữ liệu.

Tôi có rất nhiều container và cơ sở hạ tầng mà tôi phải kiểm tra, và tôi cần lấy thông tin mạng cơ bản từ bất kỳ container nào, một cách nhanh chóng và đẹp . Đó là lý do tại sao tôi thực hiện kịch bản này.

QUAN TRỌNG: Kể từ phiên bản 1.9, Docker cho phép bạn tạo nhiều mạng và gắn chúng vào các thùng chứa.

#!/usr/bin/python

import json
import subprocess
import sys

try:
    CONTAINER = sys.argv[1]
except Exception as e:
    print "\n\tSpecify the container name, please."
    print "\t\tEx.:  script.py my_container\n"
    sys.exit(1)

# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
                      stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)

out = proc.stdout.read()
json_data = json.loads(out)[0]

net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
    net_dict['mac_addr']  = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
    net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
    net_dict['ipv4_net']  = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
    net_dict['ipv4_gtw']  = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
    net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
    net_dict['ipv6_net']  = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
    net_dict['ipv6_gtw']  = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
    for item in net_dict:
        if net_dict[item] == "" or net_dict[item] == 0:
            net_dict[item] = "null"
    print "\n[%s]" % network
    print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
    print "--------------------------------------------"
    print "IPv4 settings:{:>16}/{:<5}  {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
    print "IPv6 settings:{:>16}/{:<5}  {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

Đầu ra là:

$ python docker_netinfo.py debian1

[frontend]

02:42:ac:12:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.18.0.2/16     172.18.0.1
IPv6 settings:            null/null   null

[backend]

02:42:ac:13:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.19.0.2/16     172.19.0.1
IPv6 settings:            null/null   null

Xin vui lòng, thay đổi thành python2.7 trong một tập lệnh, python3 hiện đang được sử dụng phổ biến hoặc viết hai phiên bản
42n4

Tôi sẽ cập nhật Gist của tôi và ngay khi tôi có nó, tôi sẽ đăng ở đây. Thật vậy, trình bao bọc này được thiết kế cho Python 2.7. Cảm ơn vì bạn đã phản hồi!
ivanleoncz

9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Các công việc trên nếu container được triển khai vào mạng cầu mặc định.

Tuy nhiên, nếu sử dụng mạng cầu tùy chỉnh hoặc mạng lớp phủ, tôi thấy các cách bên dưới để hoạt động tốt hơn:

docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

9

Để mở rộng câu trả lời ko-dos ', đây là bí danh để liệt kê tất cả tên container và địa chỉ IP của chúng:

alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'

1
Điều đó có thể được đơn giản hóa khá nhiều - sử dụng docker ps -qđể tránh tail--formattránh grep. Ngoài ra, bạn có thể chuyển nhiều ID container sang docker inspectthay vì lặp trong shell.
Bryan

1
docker ps -qchỉ hiển thị ID số của container, nhưng tôi nghĩ sử dụng tên của họ là tốt hơn. tailchỉ để thoát khỏi dòng đầu tiên (tiêu đề bảng) & vẫn cần thiết. Tôi có thể sử dụng --format, mặc dù : docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done. Nhưng đó dường như không phải là một cải tiến lớn ... grepIMO dễ đọc hơn.
Marco Roy

1
Phiên bản thay đổi một chút, trong đó liệt kê IP đầu tiên, trong một dòng cùng với tên container: docker ps | đuôi -n +2 | trong khi đọc -aa; làm tên = $ {a [$ (($ {# a [@]} - 1))]}; docker kiểm tra $ name | grep "Địa chỉ IP. * [0-9] \ +" | cắt -d \ "-f 4 | tr" \ n "" "; echo -e" \ t $ {name} "; xong
Gilead

Kết thúc với:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
antogerva

9

Tôi sử dụng cách đơn giản này

docker exec -it <container id or name> hostname -i

ví dụ

ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5

7

Nếu bạn đã cài đặt Docker bằng Docker Toolbox, bạn có thể sử dụng ứng dụng Kitical để lấy địa chỉ IP của container:

  1. Chọn container
  2. Nhấp vào Cài đặt
  3. Nhấp vào tab Cổng.

Đối với tôi, địa chỉ IP nằm trên tab "Tên máy chủ / cổng", nhưng đây vẫn là một câu trả lời rất hữu ích! Lưu ý rằng docker inspectkhông hoạt động khi bạn chạy hộp công cụ docker. Nó sẽ báo cáo một địa chỉ IP, nhưng đó không phải là địa chỉ chính xác mà các dịch vụ của bạn sẽ sử dụng.
Gotran Roseen

7

Để lấy địa chỉ IP và cổng máy chủ của container:

docker inspect containerId | awk '/IPAddress/ || /HostPort/'

Đầu ra:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",

7

GHI CHÚ!!! cho Docker Soạn thư sử dụng:

Vì Docker Compose tạo một mạng riêng biệt cho mỗi cụm, nên các phương thức bên dưới không hoạt động docker-compose.


Cách thanh lịch và dễ dàng nhất là xác định hàm shell, hiện là câu trả lời được bình chọn nhiều nhất @ WouterD's :

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

Docker có thể ghi ID container vào một tệp như các chương trình Linux:

Chạy với --cidfile=filename, Docker chuyển ID của container thành "tên tệp".

Xem " Docker chạy Phần tương đương PID " để biết thêm thông tin.

--cidfile="app.cid": Write the container ID to the file

Sử dụng tệp PID:

  1. Chạy container với --cidfiletham số, app.cidnội dung tệp như sau:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Bạn có thể sử dụng nội dung tệp để kiểm tra các container Docker:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Bạn có thể trích xuất IP container bằng tập lệnh Python nội tuyến:

    $ docker inspect `cat app.cid` | python -c "import json;import sys;\
    sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])"
    172.17.0.2
    

Đây là một hình thức thân thiện hơn với con người:

#!/usr/bin/env python
# Coding: utf-8
# Save this file like get-docker-ip.py in a folder that in $PATH
# Run it with
# $ docker inspect <CONTAINER ID> | get-docker-ip.py

import json
import sys

sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])

Xem " 10 lựa chọn thay thế để nhận địa chỉ IP của Docker container " để biết thêm thông tin.


6

Đối với cửa sổ 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId

5

Điều này sẽ liệt kê tất cả các IP container trên máy chủ:

sudo docker ps -aq | while read line;  do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done

5

Docker kiểm tra việc sử dụng để in tất cả các ips container và tên tương ứng của nó

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'

5

Chỉ để hoàn thiện:

Tôi thực sự thích --formattùy chọn này, nhưng lúc đầu tôi không biết về nó nên tôi đã sử dụng một lớp lót Python đơn giản để có kết quả tương tự:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

Đây là câu trả lời tuyệt vời nhất. Ngoài ra, hãy xem câu trả lời khác - stackoverflow.com/a/36306632/432903
nguyện

5

Kết hợp các câu trả lời trước với việc tìm ID container dựa trên tên hình ảnh Docker:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`

4

Sử dụng:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1

Đây là lệnh đơn dòng thực tế. Đây là những gì tôi có. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal

4

Đối với Windows container sử dụng

docker exec <container> ipconfig

nơi <container>tên hoặc id của container.

Bạn có thể sử dụng docker psđể tìm id của container.


Hãy nhớ sử dụng ngay lập tức, ngay lập tức, nó sẽ ăn hết dung lượng ổ cứng với các lớp không bị xóa. Thật tốt khi kết hợp với nhau trong thời gian gần đây.
Contango

@Contango: 'docker exec' thực thi một lệnh trong một container đã chạy. Nó không có công tắc --rm. docs.docker.com/engine/reference/commandline/exec
kirodge

4

Nếu bạn quên ID container hoặc không muốn thao tác với các lệnh shell, tốt hơn là sử dụng UI như Portainer.

https://portainer.io/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Ở đó bạn có thể tìm thấy tất cả thông tin về container cũng IP.


4
Mặc dù liên kết này có thể trả lời câu hỏi, nhưng câu trả lời chỉ liên kết không được khuyến khích trên Stack Overflow, bạn có thể cải thiện câu trả lời này bằng cách lấy các phần quan trọng của liên kết và đưa nó vào câu trả lời của bạn, điều này đảm bảo câu trả lời của bạn vẫn là câu trả lời nếu liên kết bị thay đổi hoặc bị xóa :)
WhatsThePoint
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.