Докер просматривает журнал закрытого контейнера

102

Можно ли как-нибудь просмотреть журнал закрытого контейнера?

Я могу получить идентификатор завершенного контейнера с помощью, docker ps -aно я хочу знать, что произошло, когда он работал.

Мало что знает
источник

Ответы:

105

Используйте docker logs. Он также работает для остановленных контейнеров и захватывает все потоки STDOUT и STDERR основного процесса контейнера:

$ docker run -d --name test debian echo "Hello World"
02a279c37d5533ecde76976d7f9d1ca986b5e3ec03fac31a38e3dbed5ea65def

$ docker ps -a
CONTAINER ID    IMAGE     COMMAND        CREATED             STATUS                     PORTS               NAMES
49daa9d41a24    debian    "echo test"    2 minutes ago       Exited (0) 2 minutes ago                       test

$ docker logs -t test
2016-04-16T15:47:58.988748693Z Hello World
Helmbert
источник
4
Для стека докеров, где он перезапускается каждые несколько секунд: stack=s1 && c=$(task_id=$(docker stack ps "$stack" --filter desired-state=shutdown | tail -n +2 | head -n 1 | awk '{print $1}') && docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' "$task_id") && docker logs "$c"имя стека указывается в начале команды.
x-yuri
17

docker logs --tail=50 <container id> для последних пятидесяти строк - полезно, когда ваш контейнер работает долгое время.

Клив
источник
1
@Whitefret, я обновил ответ вашим предложением. Исходный ответ потянул бы весь журнал вниз и следил за ним локально, потребовалось бы очень много времени с большим журналом и медленной сетью
Мэтью
В диспетчере предупреждений я вижу много этих сообщений, но не уверен, связаны ли они с предупреждением:
Арнав Бозе,
10

Вы можете использовать команду ниже для копирования журналов даже из закрытого контейнера:

docker cp container_name :path_of_file_in_container destination_path_locally

Например:

docker cp sravya:/tmp/report /root/mylog
Сравья
источник
6

Чтобы напрямую просмотреть файл журнала закрытого контейнера в меньшем объеме, прокрученном до конца файла, я использую:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less +G

запустить как ./viewLogs.sh ИМЯ КОНТЕЙНЕРА

Этот метод имеет то преимущество перед docker logsоснованными подходами, что файл открывается напрямую, а не в потоковом режиме.

sudo необходимо, так как LogPath / File обычно находится в корневом каталоге

icyerasor
источник