私は最近、過去のDockerコンテナーが占めるスペースのため、ディスク全体をクリーンアップする必要がありました。だから私は殺されたコンテナのログにアクセスできると思います。
たとえば、私はコンテナーのドッキング履歴を持っています:
$ docker history xxx_app
IMAGE CREATED CREATED BY SIZE COMMENT
d7cfe17fc42a 56 minutes ago /bin/sh -c #(nop) EXPOSE 3000/tcp 0 B
cd26ca1108f0 56 minutes ago /bin/sh -c #(nop) COPY dir:8daa84a931569267ab 62.27 MB
6fa873fcc7bb 9 days ago /bin/sh -c npm install && npm cache clean 177.8 MB
67a23b0934d8 9 days ago /bin/sh -c #(nop) COPY file:5dcb2a83410d0aa7f 1.529 kB
3b7197885c91 3 weeks ago /bin/sh -c #(nop) ENV NODE_ENV= 0 B
79a447242ea5 3 weeks ago /bin/sh -c #(nop) ARG NODE_ENV 0 B
b1909b86ce39 3 weeks ago /bin/sh -c #(nop) CMD ["npm" "start"] 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ONBUILD COPY . /usr/src/ap 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ONBUILD RUN npm install && 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ONBUILD COPY package.json 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ONBUILD ENV NODE_ENV $NODE 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ONBUILD ARG NODE_ENV 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) WORKDIR /usr/src/app 0 B
...
しかし、ログにアクセスするとエラーが発生します。
docker logs 67a23b0934d8
Error: No such container: 67a23b0934d8
それにもかかわらず、作成されたコンテナーイメージによってディスクがいっぱいになり、約1か月前にクリーンアップするために この記事 に従ってアクションを実行する必要がありました。では、過去のログにアクセスできますか?
PS:私はドッカーについてあまり知識がありません、私はプロジェクトを引き継ぎました。各コードの更新後にコンテナが再起動される方法は次のとおりです。
docker-compose -f docker-compose-production.yaml down
docker-compose -f docker-compose-production.yaml up -d --build
デフォルトでは、コンテナを破棄するとログも削除されます。ログが必要な場合は、-log-driverオプションを指定する必要があります。最新のGNU/Linuxボックスでは、たとえばdocker runコマンドで、journaldを使用します。
docker run --log-driver=journald
Docker-compose.yml構文を使用した別の例:
mycontainer:
image: myimage
logging:
driver: journald
options:
tag: mytag
次に、journalctlコマンド+フィルター規則を使用してログにアクセスします
journalctl -u docker CONTAINER_NAME=mycontainer_name
journalctl -u docker CONTAINER_TAG=mytag
タグは、docker-composeなど、複数のサービスアプリケーションを実行している場合に役立ちます。
あなたの場合、コンテナーはdocker-composeを使用して「再作成」されるため、logging-driverのものを指定しない場合、ログはコンテナーの有効期間にリンクされます。
また、Docker履歴コマンドは、コンテナーではなくイメージにリンクされています(コンテナー==指定されたイメージの実行中のインスタンス)
質問ではコンテナが破棄(削除)されずに強制終了されると述べられているため、docker logs <container-id>
を実行していない実行中のコンテナのログに引き続きアクセスできます。
実行されていないコンテナのIDはdocker ps -a
で確認できます。
デフォルトのdocker loggingドライバーがある限り。