ドッカーCLIは、APIを使用してデーモンと通信します。 CLIが要求する簡単な方法は、デバッグモードでデーモンを実行することです。デーモンはデーモンログにAPI呼び出しを記録します。
通常のデーモンをデバッグモードで実行しない場合は、docker-in-dockerを使用できます。これには、Docker Hub(https://hub.docker.com/_/docker/)の公式docker
イメージを使用することができます。
たとえば、Docker 1.13.1デーモンの要求を表示するには、次のように入力します。
まず、ドッカー1.13.1でコンテナを開始します。対話モードでコンテナを起動し、sh
をメインコマンドとして提供します(これにより、少し簡単になります)。
docker run -it --rm \
-v /var/lib/docker \
--privileged \
--name my-docker \
docker:1.13.1 \
sh
コンテナ内では、フォアグラウンドでデーモン(dockerd
)を起動します。
dockerd --debug --iptables=false
デーモンが起動しています。デーモンが実行されたら
DEBU[0000] Listener created for HTTP on unix (/var/run/docker.sock)
INFO[0000] libcontainerd: new containerd process, pid: 16
DEBU[0000] containerd: read past events count=0
...
...
DEBU[0001] Registering POST, /networks/prune
DEBU[0001] Registering DELETE, /networks/{id:.*}
INFO[0001] API listen on /var/run/docker.sock
、は新しいシェルを開きます。そのシェルでは、ちょうど起動したコンテナに新しいsh
セッションをdocker exec
で開きます。上記の例では、コンテナ名としてmy-docker
を使用しているため、コマンドは次のようになります。そのコンテナ内
docker exec -it my-docker sh
、あなたは今、ドッキングウィンドウのコマンドを実行することができ、あなたが実行する各コマンドのために作られたAPIの呼び出しは、あなたの他のシェルでデーモンの出力に表示されます。
たとえば、実行中です。
docker network create foobar
デーモンログに次のように表示されます。
DEBU[0304] Calling GET /_ping
DEBU[0304] Calling POST /v1.26/networks/create
DEBU[0304] form data: {"Attachable":false,"CheckDuplicate":true,"Driver":"bridge","EnableIPv6":false,"IPAM":{"Config":[],"Driver":"default","Options":{}},"Internal":false,"Labels":{},"Name":"foobar","Options":{}}
API呼び出しの本体はform data:
後に印刷された、とされています。
{
"Attachable": false,
"CheckDuplicate": true,
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Config": [],
"Driver": "default",
"Options": {}
},
"Internal": false,
"Labels": {},
"Name": "foobar",
"Options": {}
}