Dockerコンテナーでコマンドを実行するには、コンテナーにアクセスしてからコマンドを入力する必要がありますが、コンテナーの数が多い場合、一度に1つのコンテナーにアクセスしてコマンドを実行してもまったく効果がありません。 この記事では、コンテナにアクセスせずにコンテナでコマンドを実行する方法を説明します。
コンテナーにアクセスしてファイルを作成する
まず、docker psコマンドを使用して、現在実行中のコンテナーを一覧表示します
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa05e898c196 centos "/bin/bash" About a minute ago Up 11 seconds CENTOS7
次のコマンドでコンテナにアクセスします。
docker exec -it CENTOS7 /bin/bash
構文:
docker exec -it <container id hoặc tên container> /bin/bash
/ optディレクトリにテストファイルを作成します
[root@fa05e898c196 /]# touch /opt/test.txt
[root@fa05e898c196 /]# ls -l /opt/
drwxr-xr-x 2 root root 6 Nov 16 03:57 test.txt
コンテナを終了し、Ctrl + Dを押します
ホストからDockerコンテナーでコマンドを実行する
ホストからコンテナ内のステートメントを実行するには、次の構文でコマンドを実行します。
docker exec /bin/bash -c ''
例:
# docker exec CENTOS7 /bin/bash -c 'ls -l /opt'
total 0
drwxr-xr-x 2 root root 6 Nov 16 03:57 test.txt
ホストから、コンテナCENTOS 7のコマンドls -l /optディレクトリを使用しました。より複雑なコマンドを実行したり、複数のコマンドを組み合わせたりできます。
例:
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"'