Nhận id vùng chứa docker từ tên vùng chứa


110

Lệnh để lấy id vùng chứa docker từ tên vùng chứa là gì?


4
Tôi đang thử ngay bây giờ, không thể tìm thấy bất kỳ mẫu nào trực tuyến. Cảm ơn vì đã bỏ phiếu, tôi thích những người hạnh phúc.
Dimitri Kopriwa

Bạn nên đọc Cách hỏi và cung cấp một ví dụ có thể tái tạo tối thiểu . Làm thế nào để docker --listhay cái nhìn tương tự như thế nào? Lệnh tạo vùng chứa mới là gì? vv
fedorqui 'VẬY đừng làm hại'.

1
Tôi nghĩ câu hỏi của tôi khá rõ ràng, hãy bình chọn, tôi sẽ đưa ra câu trả lời càng sớm càng tốt.
Dimitri Kopriwa

1
Không có cái gì gọi là "thùng chứa" mà tôi biết trong bash. Có lẽ ý bạn là thùng chứa docker ? Nếu vậy, những người xem thẻ "bash" có thể bị nhầm lẫn. tuy nhiên bạn nhận được id vùng chứa từ tên, tôi chắc chắn rằng đó là một lệnh thực sự và không liên quan gì đến ngôn ngữ lập trình bash.
djhaskin987

Câu trả lời:


190

Trong Linux:

sudo docker ps -aqf "name=containername"

Hoặc trong OS X, Windows:

docker ps -aqf "name=containername"

containernametên vùng chứa của bạn ở đâu .

Để tránh nhận được kết quả dương tính giả, như @llia Sidorenko lưu ý, bạn có thể sử dụng các neo regex như sau:

docker ps -aqf "name=^containername$"

giải trình:

  • -qđể yên tĩnh. chỉ xuất ID
  • -acho tất cả. hoạt động ngay cả khi vùng chứa của bạn không chạy
  • -fcho bộ lọc .
  • ^tên vùng chứa phải bắt đầu bằng chuỗi này
  • $tên vùng chứa phải kết thúc bằng chuỗi này

7
một lưu ý cho bất cứ ai tình cờ gặp này: sudo không còn cần thiết trên linux nếu bạn thêm mình vào nhóm Docker (rất khuyến khích)
code_monk

9
Hãy cẩn thận với câu trả lời này, như tên = containername thực sự là một ký tự đại diện và nó sẽ phù hợp với bất cứ điều gì với tên containername (*.) (. *)
Ilia Sidorenko

5
@ekkis sử dụng --no-trunccờ. sodocker ps --no-trunc -aqf "name=containername"
code_monk

3
Kể từ 2019-01-07, điều này không hoạt động với tôi. Tôi đang sử dụng docker v17.06.0. Lệnh docker inspect --format="{{.Id}}" imageNameđã làm việc cho tôi.
PatS

1
@code_monk, Cảm ơn bạn đã xác nhận. Tôi đã thêm nhận xét vào câu trả lời của Rosberg Linhares, đó là nơi tôi lấy ý tưởng và đề xuất câu trả lời của anh ấy được thay đổi thành câu trả lời đúng.
PatS

37

Bạn có thể thử điều này:

docker inspect --format="{{.Id}}" container_name

Cách tiếp cận này độc lập với hệ điều hành.


5
Điều này trả về ID ẢNH KHÔNG CHỨA ID
vijay

2
@vijay, đối với tôi, điều này cung cấp ID vùng chứa: https://i.ibb.co/BPwyxDj/Docker-Container-Id.png
Rosberg Linhares

Điều này cũng cung cấp cho tôi ID vùng chứa. ID vùng chứa đầy đủ, không chỉ 12 ký tự đầu tiên bị cắt ngắn.
cowlinator

Thích cái này! Cảm ơn. 👍
GollyJer

@vijay @RosbergLinhares nếu bạn cung cấp tên của vùng chứa (được đưa ra trong NAMEScột với docker ps), nó sẽ cung cấp ID vùng chứa. Nếu tên hình ảnh (được cung cấp trong IMAGEcột với docker ps) được cung cấp thay thế, nó sẽ xuất ra ID hình ảnh thay thế.
Wolfson

12
  1. Nhận id vùng chứa của các vùng chứa đang chạy ::

    $docker ps -qf "name=IMAGE_NAME"
    
        -f: Filter output based on conditions provided
        -q: Only display numeric container IDs
    
  2. Nhận id vùng chứa của tất cả các vùng chứa ::

    $docker ps -aqf "name=IMAGE_NAME"
    
        -a: all containers
    

2
docker ps -fq không hoạt động tuy nhiên docker ps -qfđã làm (thứ tự của cờ)
thom_nic

4

Lệnh sau:

docker ps --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | Image:  {{.Image}} |  Ports: {{.Ports}}'

Cung cấp đầu ra này:

CONTAINER ID : d8453812a556 | Name: peer0.ORG2.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:27051->7051/tcp, 0.0.0.0:27053->7053/tcp
CONTAINER ID : d11bdaf8e7a0 | Name: peer0.ORG1.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:17051->7051/tcp, 0.0.0.0:17053->7053/tcp
CONTAINER ID : b521f48a3cf4 | Name: couchdb1 | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5985->5984/tcp
CONTAINER ID : 14436927aff7 | Name: ca.ORG1.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7054->7054/tcp
CONTAINER ID : 9958e9f860cb | Name: couchdb | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp
CONTAINER ID : 107466b8b1cd | Name: ca.ORG2.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7055->7054/tcp
CONTAINER ID : 882aa0101af2 | Name: orderer1.o1.ac.ae | Image:  hyperledger/fabric-orderer:1.4 |  Ports: 0.0.0.0:7050->7050/tcp`enter code here`

3

Nếu bạn muốn nhận được ContainerId hoàn chỉnh dựa trên tên Vùng chứa thì hãy sử dụng lệnh sau

 docker ps --no-trunc -aqf name=containername

0

Hình ảnh Docker kiểm tra ImageName \ ImageId --format = {{'. ConatinerConfig.Hostname'}}


Vui lòng thêm giải thích cho câu trả lời của bạn. Các câu trả lời chỉ có mã (hoặc trong trường hợp này chỉ là lệnh) không hữu ích cho người dùng mới, những người có thể không hiểu lệnh hoặc mã thực sự làm gì. Tra cứu chương trình sùng bái hàng hóa để biết tại sao điều này lại tệ.
Max Vollmer

0

Trong trường hợp của tôi, tôi đang chạy vùng chứa Tensorflow Docker trong Ubuntu 20.04: Chạy vùng chứa docker của bạn trong Một thiết bị đầu cuối, tôi đã chạy nó với

docker run -it od

Và sau đó bắt đầu một thiết bị đầu cuối khác và chạy bên dưới docker psvới sudo:

sudo docker ps

Tôi đã nhận thành công id vùng chứa:

CONTAINER ID        IMAGE               COMMAND             CREATED             
STATUS              PORTS               NAMES
e4ca1ad20b84        od                  "/bin/bash"         18 minutes ago      
Up 18 minutes                           unruffled_stonebraker

-2

Cách đơn giản nhất tôi có thể nghĩ ra là phân tích cú pháp đầu ra của docker ps

Hãy chạy hình ảnh ubuntu mới nhất một cách tương tác và kết nối với nó

docker run -it ubuntu /bin/bash

Nếu bạn chạy docker pstrong một thiết bị đầu cuối khác, bạn có thể thấy một cái gì đó như

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8fddbcbb101c        ubuntu:latest       "/bin/bash"         10 minutes ago      Up 10 minutes                           gloomy_pasteur

Thật không may, phân tích cú pháp định dạng này không dễ dàng vì chúng sử dụng dấu cách để căn chỉnh thủ công nội dung

$ sudo docker ps | sed -e 's/ /@/g'
CONTAINER@ID@@@@@@@@IMAGE@@@@@@@@@@@@@@@COMMAND@@@@@@@@@@@@@CREATED@@@@@@@@@@@@@STATUS@@@@@@@@@@@@@@PORTS@@@@@@@@@@@@@@@NAMES
8fddbcbb101c@@@@@@@@ubuntu:latest@@@@@@@"/bin/bash"@@@@@@@@@13@minutes@ago@@@@@@Up@13@minutes@@@@@@@@@@@@@@@@@@@@@@@@@@@gloomy_pasteur@@@@@@

Đây là một tập lệnh chuyển đổi đầu ra thành JSON.

https://gist.github.com/mminer/a08566f13ef687c17b39

Trên thực tế, đầu ra thuận tiện hơn một chút để làm việc hơn thế. Mỗi trường rộng 20 ký tự. [['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]

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.