Как увидеть состояние докера вместо взаимодействия с оболочкой? - PullRequest
0 голосов
/ 08 октября 2019

Я использую следующую команду для создания веб-сервера

docker run --name webapp -p 8080:4000 mypyweb

Когда он остановился и я хочу перезапустить, я всегда использую:

sudo docker start webapp && sudo docker exec -it webapp bash 

Но я не вижу серверукажите в первый раз:

Digest: sha256:e61b45be29f72fb119ec9f10ca660c3c54c6748cb0e02a412119fae3c8364ecd

Status: Downloaded newer image for ericgoebelbecker/stackify-tutorial:1.00

* Running on http://0.0.0.0:4000/ (Press CTRL+C to quit)

Как увидеть состояние вместо взаимодействия с оболочкой?

Ответы [ 3 ]

2 голосов
/ 08 октября 2019

Когда вы используете docker run, поведение по умолчанию - запуск контейнера без подключения. Это работает в фоновом режиме и отсоединяется от стандартного ввода / вывода вашей оболочки.

Чтобы запустить контейнер на переднем плане и подключен к стандартному вводу / выводу:

docker run --interactive --tty --publish=8080:4000 mypyweb

В docker start контейнераналогично:

docker start --interactive --attach [CONTAINER]

NB --attach вместо -tty

Вы можете перечислить (все добавить --all) запущенные контейнеры:

docker container ls

Например, я запустил Nginx:

CONTAINER ID  IMAGE  PORTS                 NAMES
7cc4b4e1cfd6  nginx  0.0.0.0:8888->80/tcp  nostalgic_thompson

NB Вы можете использовать NAME или любое уникально идентифицируемое подмножество ID для ссылки на контейнер. Затем:

docker stop nostalgic_thompson
docker start --interative --attach 7cc4

Вы можете проверить журналы контейнера (при запуске отдельно или из другой оболочки), взяв контейнер ID или NAMES

docker logs nostalgic_thompson
docker logs 7cc4 

HTH!

1 голос
/ 08 октября 2019

Если вы считаете, что ваш контейнер плохо себя ведет, часто не просто удалить его и создать новый.

docker rm webapp
docker run --name webapp -p 8080:4000 mypyweb

Контейнеры иногда имеют более сложные последовательности запуска, и они могут предполагать, что они обычно начинаются счистый лист. Это также должно быть чрезвычайно обычным, чтобы удалить и воссоздать контейнер;это требуется для некоторых основных задач, таких как обновление образа под контейнером до более новой версии или изменение опубликованных портов или переменных среды.

docker exec, вероятно, не должно быть частью вашего основного рабочего процесса, больше, чем вы "d открыть оболочку для взаимодействия с вашим веб-браузером. Я обычно не склонен к docker stop контейнерам, кроме как сразу docker rm их.

1 голос
/ 08 октября 2019

Использование docker exec вызывает прикрепление оболочки к контейнеру. Если вы сравниваете поведение docker run с docker start, они ведут себя по-разному, и это сбивает с толку. Попробуйте сделать следующее:

$ sudo docker start -a webapp

флаг -a указывает докеру подключать stdout/stderr и сигналы пересылки.

Есть некоторые другие переключатели, которые вы можете использовать с командой start (иогромное количество для команды run). Вы можете запустить docker [command] --help, чтобы получить сводную информацию о параметрах.

Еще одна команда, которую вы, возможно, захотите использовать, - logs, которая покажет журналы вывода консоли для работающего контейнера:

$ docker ps
[find the container ID]
$ docker logs [container ID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...