Thực thi câu lệnh trong Docker Container từ Host

Docker

Để thực thi lệnh trong một Docker Container chúng ta phải truy cập vào container sau đó tiến hành gõ lệnh, tuy nhiên nếu số lượng Container nhiều, việc lần lượt truy cập từng Container để thực thi lệnh sẽ không hiệu quả chút nào. Bài viết này sẽ hướng dẫn các bạn thực thi lệnh trong Container mà không cần truy cập vào nó.

Xem thêm:

Truy cập Container và tạo file

Trước hết dùng lệnh docker ps để liệt kê các Container đang chạy

[root@itfromzero ~]# docker ps
CONTAINER ID     IMAGE     COMMAND         CREATED               STATUS         PORTS       NAMES
fa05e898c196     centos    "/bin/bash"     About a minute ago    Up 11 seconds              CENTOS7

Truy cập vào Container bằng lệnh sau:

docker exec -it CENTOS7 /bin/bash

Cú pháp:

docker exec -it <container id hoặc tên container> /bin/bash

Tạo test file tại thư mục /opt

[root@fa05e898c196 /]# mkdir /opt/test.txt
[root@fa05e898c196 /]# ls -l /opt/
drwxr-xr-x 2 root root 6 Nov 16 03:57 test.txt

Thoát khỏi container các bạn nhấn tổ hợp phím Ctrl + D

Thực thi câu lệnh trong Docker Container từ Host

Để thực thi câu lệnh trong Container từ Host các bạn thực thi lệnh theo cú pháp sau:

docker exec <container id hoặc tên container> /bin/bash -c ‘<câu lệnh>’

Ví dụ:

[root@itfromzero ~]# docker exec CENTOS7 /bin/bash -c 'ls -l /opt'
total 0
drwxr-xr-x 2 root root 6 Nov 16 03:57 test.txt
[root@itfromzero ~]#

Từ host mình đã dùng lệnh ls -l thư mục opt trong Container CENTOS 7. Các bạn có thể thực thi nhiều lệnh phức tạp hơn, hay kết hợp nhiều lệnh với nhau. Ví dụ:

docker exec CENTOS7 /bin/bash -c 'cd /etc/init.d/ && /etc/init.d/mysqld start' 
docker exec CENTOS7 /bin/bash -c 'mysql -h localhost -u root -p'PassWord' DB_1 -e "truncate table DB_1.DB_LOG"'
docker exec CENTOS7 /bin/bash -c 'mysql -h localhost -u root -p'PassWord' DB_2 -e "truncate table DB_2.DB_LOG"'

Chúc các bạn thành công.