web-dev-qa-db-ja.com

強制終了したDockerコンテナーのアクセスログ

私は最近、過去の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
8
coyotte508

デフォルトでは、コンテナを破棄するとログも削除されます。ログが必要な場合は、-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履歴コマンドは、コンテナーではなくイメージにリンクされています(コンテナー==指定されたイメージの実行中のインスタンス)

13
papey

質問ではコンテナが破棄(削除)されずに強制終了されると述べられているため、docker logs <container-id>を実行していない実行中のコンテナのログに引き続きアクセスできます。

実行されていないコンテナのIDはdocker ps -aで確認できます。

デフォルトのdocker loggingドライバーがある限り。

5
Robert