docker attach
sẽ cho phép bạn kết nối với bộ chứa Docker của bạn, nhưng điều này thực sự không giống như ssh
. Ví dụ, nếu bộ chứa của bạn đang chạy một máy chủ web, docker attach
có thể sẽ kết nối bạn với thiết bị xuất chuẩn của quy trình máy chủ web. Nó sẽ không nhất thiết phải cung cấp cho bạn một vỏ.
Các docker exec
lệnh có lẽ là những gì bạn đang tìm kiếm; điều này sẽ cho phép bạn chạy các lệnh tùy ý bên trong một container hiện có. Ví dụ:
docker exec -it <mycontainer> bash
Tất nhiên, bất cứ lệnh nào bạn đang chạy đều phải tồn tại trong hệ thống tệp chứa.
Trong lệnh trên <mycontainer>
là tên hoặc ID của thùng chứa đích. Không quan trọng bạn có sử dụng hay không docker compose
; chỉ cần chạy docker ps
và sử dụng ID (chuỗi thập lục phân được hiển thị trong cột đầu tiên) hoặc tên (được hiển thị trong cột cuối cùng). Ví dụ: đã cho:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
Tôi có thể chạy:
$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
Tôi có thể hoàn thành điều tương tự bằng cách chạy:
$ docker exec -it d2d4a89aaee9 ip addr
Tương tự, tôi có thể bắt đầu một cái vỏ trong container;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$