Làm thế nào để kiểm tra xem động cơ docker và một container docker có đang chạy không?


103

Trong tập lệnh, tôi cần kiểm tra:

a) Động cơ docker có chạy không?
b) Cho một tên vùng chứa, container đó có đang chạy không?

[từ ngữ ban đầu của câu hỏi này không rõ ràng, với một số người hiểu nó là "công cụ kiểm tra docker" và những người khác là "kiểm tra thùng chứa docker"]


4
Bất kỳ lệnh nào của docker (ngoại trừ docker -v), như docker ps
Glen Pierce

docker attach containerName
Khủng long Mattia

1
hoặc thử docker ps
Mattia Dinosaur

2
sudo systemctl status docker
Duk

docker ps----- Lệnh này sẽ chỉ hiển thị các vùng chứa RUNNING
Suhaib 20/1218

Câu trả lời:


109

Nếu bạn đang tìm kiếm một vùng chứa cụ thể, bạn có thể chạy:

if [ "$( docker container inspect -f '{{.State.Running}}' $container_name )" == "true" ]; then ...

Để tránh sự cố với vùng chứa đang trong vòng lặp sự cố và liên tục khởi động lại để hiển thị rằng nó đã hoạt động, bạn có thể cải thiện điều trên bằng cách chọn Statustrường:

if [ "$( docker container inspect -f '{{.State.Status}}' $container_name )" == "running" ]; then ...

Nếu bạn muốn biết liệu dockerd có tự chạy trên máy cục bộ hay không và bạn đã cài đặt systemd, bạn có thể chạy:

systemctl show --property ActiveState docker

Bạn cũng có thể kết nối với docker bằng docker infohoặc docker versionvà chúng sẽ báo lỗi nếu daemon không khả dụng.


làm thế nào bạn sẽ đặt docker inspect …bên trong một iftuyên bố của một tập lệnh bash?
François Romain

15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch

2
Tôi sử dụng docker inspect -f '{{.State.Restarting}}' $container_namekể từ khi tôi bắt đầu vùng chứa của mình với chính sách khởi động lại, mặc dù ở đây "true" là điều bạn muốn tránh.
stav meir

4
Cả bash và docker sẽ phàn nàn về iftuyên bố trên , khi vùng chứa không chạy. Điều này che giấu thông tin không mong muốn về trường hợp sai: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor

1
@MarcoLackovic nghe có vẻ như bạn đã bỏ qua phần "bạn đã cài đặt systemd" ở trên.
BMitch

48

Tôi đã sử dụng

docker info

để kiểm tra bằng tập lệnh bash nếu công cụ docker đang chạy.


6
Câu trả lời này được đánh giá thấp. Nó đa nền tảng và vượt qua / thất bại nhanh chóng.
Andy Fleming

2
docker info > /dev/null 2>&1nếu bạn không cần đầu ra
buggymcbugfix

22

bạn có thể kiểm tra trạng thái docker bằng cách sử dụng: systemctl is-active docker

➜  ~  systemctl is-active docker
active

bạn có thể sử dụng nó như:

➜  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
is alive :)

➜  ~  sudo systemctl stop docker

➜  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
 * empty response *

Điều này không trả lời câu hỏi. "để kiểm tra với tên vùng chứa"
jens.klose

vâng có vẻ như câu hỏi là mơ hồ, để kiểm tra nếu container được chạy bạn nên sử dụng docker ps --filter name=pattern, sau đó bạn có thể định dạng đầu ra để kiểm tra chỉ tình trạng thêm cờ này:--format {{.Status}}
Hernan Garcia

16

Liệt kê tất cả các vùng chứa:

docker container ls -a

ls= list
-a= all

Kiểm tra cột "trạng thái"


1
Đó là những gì tôi cần, vì nó hoạt động trên mọi nền tảng !!
Rolljee

dễ dàng và đơn giản ... ĐÃ LÀM VIỆC.
RMati

15

Đối với người dùng OS X (Mojave 10.14.3)

Đây là những gì tôi sử dụng trong tập lệnh Bash của mình để kiểm tra xem Docker có đang chạy hay không

# Check if docker is running
if ! docker info >/dev/null 2>&1; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi

1
Tôi đã cấu trúc lại cái này để loại bỏ phản vật chất if [[ $? -ne 0 ]].
tripleee

9

Bất kỳ lệnh docker nào (ngoại trừ docker -v), chẳng hạn như docker ps If Docker đang chạy, bạn sẽ nhận được một số phản hồi hợp lệ, nếu không, bạn sẽ nhận được thông báo bao gồm "Trình nền docker của bạn có đang hoạt động không?"

Bạn cũng có thể kiểm tra trình quản lý tác vụ của mình.


9

Đôi khi bạn không biết tên vùng chứa đầy đủ, trong trường hợp này, đây là những gì phù hợp với tôi:

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

Chúng tôi liệt kê tất cả các quy trình vùng chứa đang chạy ( docker ps -asẽ hiển thị cho chúng tôi những tiến trình không chạy, nhưng đó không phải là những gì tôi cần), chúng tôi tìm kiếm một từ ( grepphần) cụ thể và chỉ thất bại nếu chúng tôi không tìm thấy ít nhất một vùng chứa đang chạy có tên chứa từ khóa.


Được tái cấu trúc để loại bỏ một bộ sưu tập lớn các phản vật chất lập trình shell.
tripleee

5

Bạn có thể kiểm tra bằng lệnh này, systemctl status dockernó sẽ hiển thị trạng thái của docker. Nếu bạn muốn bắt đầu, bạn có thể sử dụng systemctl start dockerthay vì systemctlbạn cũng có thể thử với service, service docker statusservice docker starttương ứng.


5
Câu trả lời này giả định rằng người dùng cuối đang sử dụng systemdlàm init của họ.
Rafael

systemctl status dockerhiển thị chính xác là dịch vụ docker đang chạy. Cảm ơn bạn.
imsrgadich

4

Bạn cũng có thể kiểm tra xem một bộ chứa docker cụ thể đang chạy hay không bằng cách sử dụng lệnh sau:

docker inspect postgres | grep "Running"

Lệnh này sẽ kiểm tra xem ví dụ: vùng chứa postgres của tôi có đang chạy hay không và sẽ trả về kết quả đầu ra là "Đang chạy": true

Hi vọng điêu nay co ich.


Điều này thật đúng với gì mà tôi đã tìm kiếm. Và nó hoạt động. (Đó là tốt khi những người bỏ phiếu một cái gì đó xuống nói lý do tại sao, vì vậy noobs có thể học tốt hơn SO nghi thức :).)
allenjom

Tôi đã không bỏ phiếu nhưng "Lỗi: Không có đối tượng như vậy: postgres"
ged

3

Chạy:

docker version

Nếu docker đang chạy, bạn sẽ thấy:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Server: Docker Engine - Community
 Engine:
  Version:          ...
 [omitted]

Nếu docker không chạy, bạn sẽ thấy:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Error response from daemon: Bad response from Docker engine


1

trên máy Mac, bạn có thể thấy hình ảnh:

nhập mô tả hình ảnh ở đây

nếu bạn nhấp chuột phải vào biểu tượng docker thì bạn sẽ thấy:

nhập mô tả hình ảnh ở đây

cách khác:

docker ps

docker run hello-world


0

Cách tôi đăng ký SSH.Run:

systemctl

Nếu phản hồi: Không lấy được kết nối D-Bus: Thao tác không được phép

Nó là một docker hoặc thùng chứa WSL.


0

docker ps -a

Bạn có thể xem tất cả các thùng chứa docker cho dù nó còn sống hay đã chết.

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.