Android

Làm thế nào để kết nối với một container docker

Các lệnh cơ bản của Docker và xây dựng Container bằng Dockerfile (Trung Tâm Tin Học VnPro)

Các lệnh cơ bản của Docker và xây dựng Container bằng Dockerfile (Trung Tâm Tin Học VnPro)

Mục lục:

Anonim

Kết nối với một container Docker đang chạy rất hữu ích khi bạn muốn xem những gì đang xảy ra bên trong container. Nếu bộ chứa Docker không hoạt động như mong đợi, bạn có thể gắn vào bộ chứa hoặc lấy vỏ cho bộ chứa và chạy các lệnh như ps hoặc top . Bạn cũng có thể nhập container, cài đặt các gói mới và xây dựng hình ảnh Docker mới từ nó.

Trong hướng dẫn này, chúng tôi sẽ giải thích cách gắn vào quy trình chạy chính của bộ chứa và cách lấy vỏ vào thùng chứa đang chạy.

Đính kèm vào Container

Mặc dù có thể chạy nhiều tiến trình trong một container, nhưng hầu hết các container docker chỉ chạy một tiến trình duy nhất. Lệnh được thực thi khi bắt đầu một container được chỉ định bằng lệnh ENTRYPOINT và / hoặc RUN .

Lệnh docker attach cho phép bạn gắn thiết bị đầu cuối của bạn vào container đang chạy. Điều này hữu ích khi bạn muốn xem những gì được viết trong đầu ra tiêu chuẩn trong thời gian thực hoặc để kiểm soát quá trình một cách tương tác.

Để hiểu rõ hơn về cách hoạt động của lệnh attach hãy chạy một thùng chứa Nginx mới tách ra bằng hình ảnh Nginx chính thức.

docker container run --name my_nginx -d -p 8080:80 nginx

Tùy chọn -p 8080:80 yêu cầu Docker liên kết cổng 8080 của container với cổng 80 trên máy chủ.

Liệt kê các container để đảm bảo container container my_nginx đang chạy:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

Đính kèm vào container bằng ID hoặc tên của container:

docker container attach my_nginx

Lệnh mặc định của hình ảnh nginx được thực thi khi bạn chạy vùng chứa được đặt thành CMD . Khi bạn chạy lệnh attach thiết bị đầu cuối của bạn sẽ gắn vào quá trình nginx .

Mở 127.0.0.1:8080 trong trình duyệt của bạn và bạn có thể xem đầu ra của quá trình nginx trong thời gian thực.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Để có quyền truy cập vào nhật ký container, bạn nên sử dụng lệnh docker logs .

Để tách khỏi bộ chứa mà không dừng nó, hãy sử dụng tổ hợp CTRL-p CTRL-q . Nhấn CTRL-c dừng container.

Nếu các quy trình đang chạy mà bạn đang đính kèm để chấp nhận đầu vào, bạn có thể gửi hướng dẫn đến nó.

Nhận một vỏ để chứa

Lệnh docker exec cho phép bạn chạy các lệnh bên trong một container đang chạy.

Để xem lệnh exec hoạt động như thế nào và làm thế nào nó có thể được sử dụng để vào vỏ container, trước tiên, hãy bắt đầu một container mới. Chúng tôi sẽ sử dụng hình ảnh MySQL chính thức:

docker container run --name my_mysql -d mysql

Điều này sẽ tạo ra một thùng chứa có tên là my my my my my my.

Để thực thi một lệnh bên trong container, hãy chạy lệnh sau:

docker container exec -it my_mysql ls /var

Tùy chọn -i là viết tắt của tương tác và -t yêu cầu Docker phân bổ một thiết bị TTY giả. Lệnh ls sẽ liệt kê tất cả các tệp và thư mục bên trong thư mục chứa /var :

backups cache lib local lock log mail opt run spool tmp

Để lấy shell vào container tức là, để vào bên trong container, bắt đầu một phiên shell mới bằng cách thực hiện nhị phân shell. Bạn có thể sử dụng sh , bash hoặc bất kỳ shell nào khác có trong ảnh.

Lệnh dưới đây sẽ tạo một phiên Bash mới bên trong container:

docker container exec -it my_mysql /bin/bash

Dấu nhắc lệnh của bạn sẽ thay đổi, cho biết bạn hiện đang làm việc trên vỏ container.

Từ đây, bạn có thể chạy các lệnh theo cách tương tự như bạn làm trên bất kỳ máy chủ Linux nào khác. Ví dụ: để có được danh sách các biến môi trường hiện tại, hãy nhập env :

env

Đầu ra sẽ trông giống như thế này:

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

Phần kết luận

Các lệnh thực thi docker exec docker attach cho phép bạn kết nối với một container đang chạy. Để có được một shell tương tác với một container, sử dụng lệnh exec để bắt đầu một phiên shell mới. Lệnh attach gắn thiết bị đầu cuối của bạn vào một container đang chạy.

bến tàu