Поиск…


Синтаксис

  • docker rm [ОПЦИИ] КОНТЕЙНЕР [КОНТЕЙНЕР ...]
  • прикрепление докеров [ОПЦИИ] КОНТЕЙНЕР
  • docker exec [OPTIONS] CONTAINER COMMAND [ARG ...]
  • docker ps [ОПЦИИ]
  • докерные журналы [ОПЦИИ] КОНТЕЙНЕР
  • докер проверяет [ОПЦИИ] КОНТЕЙНЕР | ИЗОБРАЖЕНИЕ [КОНТЕЙНЕР | ИЗОБРАЖЕНИЕ ...]

замечания

  • В приведенных выше примерах каждый раз, когда контейнер является параметром команды docker, он упоминается как <container> или container id или <CONTAINER_NAME> . Во всех этих местах вы можете либо передать имя контейнера, либо идентификатор контейнера, чтобы указать контейнер.

Листинг контейнеров

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
2bc9b1988080        redis               "docker-entrypoint.sh"   2 weeks ago         Up 2 hours          0.0.0.0:6379->6379/tcp    elephant-redis
817879be2230        postgres            "/docker-entrypoint.s"   2 weeks ago         Up 2 hours          0.0.0.0:65432->5432/tcp   pt-postgres

docker ps по себе печатает только текущие контейнеры. Чтобы просмотреть все контейнеры (включая остановленные), используйте флаг -a :

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                     NAMES
9cc69f11a0f7        docker/whalesay     "ls /"                   26 hours ago        Exited (0) 26 hours ago                             berserk_wozniak
2bc9b1988080        redis               "docker-entrypoint.sh"   2 weeks ago         Up 2 hours                0.0.0.0:6379->6379/tcp    elephant-redis
817879be2230        postgres            "/docker-entrypoint.s"   2 weeks ago         Up 2 hours                0.0.0.0:65432->5432/tcp   pt-postgres

Чтобы отобразить контейнеры с определенным статусом, используйте параметр командной строки -f для фильтрации результатов. Ниже приведен пример перечисления всех завершенных контейнеров:

$ docker ps -a -f status=exited
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                     NAMES
9cc69f11a0f7        docker/whalesay     "ls /"                   26 hours ago        Exited (0) 26 hours ago

Также можно указать только идентификаторы контейнера с ключом -q . Это позволяет легко работать с результатом с другими утилитами Unix (такими как grep и awk ):

$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230

При запуске контейнера с docker run --name mycontainer1 вы docker run --name mycontainer1 конкретное имя, а не произвольное имя (в форме mood_famous, например nostalgic_stallman), и их легко найти с такой командой

docker ps -f name=mycontainer1

Ссылка на контейнеры

Команды докеров, которые принимают имя контейнера, принимают три разных формы:

Тип пример
Полный UUID 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a
Короткая UUID 9cc69f11a0f7
название berserk_wozniak

Используйте docker ps для просмотра этих значений для контейнеров в вашей системе.

UUID генерируется Docker и не может быть изменен. Вы можете указать имя контейнера при запуске docker run --name <given name> <image> . Docker генерирует случайное имя в контейнер, если вы не укажете его во время запуска контейнера.

ПРИМЕЧАНИЕ . Значение UUID (или «короткого» UUID) может быть любой длины, пока данное значение уникально для одного контейнера

Запуск и остановка контейнеров

Чтобы остановить запущенный контейнер:

docker stop <container> [<container>...]

Это отправит основной процесс в контейнер SIGTERM, а затем SIGKILL, если он не остановится в течение льготного периода. Название каждого контейнера печатается по мере его прекращения.

Чтобы запустить контейнер, который остановлен:

docker start <container> [<container>...]

Это запустит каждый контейнер, переданный в фоновом режиме; имя каждого контейнера печатается при его запуске. Чтобы запустить контейнер на переднем плане, передайте флаг -a ( --attach ).

Список контейнеров с пользовательским форматом

docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'

Поиск конкретного контейнера

docker ps --filter name=myapp_1

Найти контейнерный IP-адрес

Чтобы узнать IP-адрес вашего контейнера, используйте:

docker inspect <container id> | grep IPAddress

или использовать докер-инспекцию

docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}

Перезапуск контейнера докеров

docker restart <container> [<container>...]

Вариант --time: Секунды ждать остановки перед умерщвлением контейнера ( по умолчанию 10)

docker restart <container> --time 10

Удаление, удаление и очистка контейнеров

docker rm можно использовать для удаления определенных контейнеров следующим образом:

docker rm <container name or id>

Чтобы удалить все контейнеры, вы можете использовать это выражение:

docker rm $(docker ps -qa)

По умолчанию докер не удаляет контейнер, который запущен. Любой запущенный контейнер выдаст предупреждающее сообщение и не будет удален. Все остальные контейнеры будут удалены.

В качестве альтернативы вы можете использовать xargs :

docker ps -aq -f status=exited | xargs -r docker rm 

Если docker ps -aq -f status=exited вернет список идентификаторов контейнеров контейнеров, имеющих статус «Выход».

Внимание: все приведенные выше примеры удаляют только контейнеры «остановлены».

Чтобы удалить контейнер, независимо от того, остановлен он или нет, вы можете использовать флаг силы -f :

docker rm -f <container name or id>

Чтобы удалить все контейнеры, независимо от состояния:

docker rm -f $(docker ps -qa)

Если вы хотите удалить только контейнеры с dead статусом:

docker rm $(docker ps --all -q -f status=dead)

Если вы хотите удалить только контейнеры с exited статусом:

docker rm $(docker ps --all -q -f status=exited)

Это все перестановки фильтров, используемых при перечислении контейнеров .

Чтобы удалить как нежелательные контейнеры, так и оборванные изображения, использующие пространство после версии 1.3 , используйте следующее (похожее на Unix-инструмент df ):

$ docker system df

Чтобы удалить все неиспользуемые данные:

$ docker system prune 

Запустить команду на уже существующий контейнер докеров

docker exec -it <container id> /bin/bash

Обычно для входа в уже запущенный контейнер можно выполнить несколько быстрых тестов или посмотреть, что делает приложение. Часто это означает плохую практику использования контейнеров из-за журналов, а измененные файлы должны размещаться в томах. Этот пример позволяет нам войти в контейнер. Это предполагает, что / bin / bash доступен в контейнере, это может быть / bin / sh или что-то еще.

docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .

Этот пример архивирует содержимое каталога данных в tar. Затем с помощью docker cp вы можете получить его.

Контейнерные журналы

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

  -f, --follow=false        Follow log output
  --help=false              Print usage
  --since=                  Show logs since timestamp
  -t, --timestamps=false    Show timestamps
  --tail=all                Number of lines to show from the end of the logs

Например:

$ docker ps
CONTAINER ID    IMAGE    COMMAND                 CREATED     STATUS       PORTS
ff9716dda6cb    nginx    "nginx -g 'daemon off"  8 days ago  Up 22 hours  443/tcp, 0.0.0.0:8080->80/tcp 

$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"

Подключиться к экземпляру, запущенному как демон

Существует два способа достижения этого, первый и наиболее известный:

docker attach --sig-proxy=false <container>

Это буквально прикрепляет ваш bash к контейнеру bash, а это означает, что если у вас запущенный скрипт, вы увидите результат.

Чтобы отсоединить, просто введите: Ctl-P Ctl-Q

Но если вам нужен более дружеский способ и чтобы создавать новые экземпляры bash, просто выполните следующую команду:

docker exec -it <container> bash

Копирование файла из / в контейнеры

от контейнера до принимающего

docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST

от хоста до контейнера

docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER

Если я использую jess / transmission из

https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/

, файлы в контейнере находятся в / передаче / загрузке

и мой текущий каталог на хосте - / home / $ USER / abc, после

docker cp transmission_id_or_name:/transmission/download .

У меня будут файлы, скопированные в

/home/$USER/abc/transmission/download

вы не можете, используя docker cp копировать только один файл, вы копируете дерево каталогов и файлы

Удаление, удаление и очистка докеров

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

docker rm -v <container id or name>

Если флаг -v не указан, то объем остается на диске как «оборванный том». Чтобы удалить все оборванные тома:

docker volume rm $(docker volume ls -qf dangling=true)

Объем docker volume ls -qf dangling=true filter возвращает список имен docker volume ls -qf dangling=true , включая немаркированные, которые не привязаны к контейнеру.

Кроме того, вы можете использовать xargs :

docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm

Экспорт и импорт файловых систем Docker container

Можно сохранить содержимое файловой системы контейнера Docker в архив архива tarball. Это полезно в том, что касается перемещения файловых систем контейнеров на разные хосты, например, если в контейнере базы данных есть важные изменения, и в противном случае невозможно повторить эти изменения в другом месте. Обратите внимание, что предпочтительно создавать совершенно новый контейнер из обновленного изображения с помощью команды docker run docker-compose.yml или файла docker-compose.yml вместо экспорта и перемещения файловой системы контейнера. Частью мощности Docker является проверяемость и отчетность его декларативного стиля создания изображений и контейнеров. Используя docker import docker export и docker import , эта мощность подавляется из-за обфускации изменений, сделанных внутри файловой системы контейнера из исходного состояния.

docker export -o redis.tar redis

Вышеупомянутая команда создаст пустое изображение, а затем экспортирует файловую redis контейнера redis в это пустое изображение. Чтобы импортировать из архива tarball, используйте:

docker import ./redis.tar redis-imported:3.0.7

Эта команда создаст изображение redis-imported:3.0.7 , из которого могут быть созданы контейнеры. Также возможно создавать изменения при импорте, а также устанавливать сообщение фиксации:

docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed

Директивы Dockerfile, доступные для использования с параметром командной строки -c - CMD , ENTRYPOINT , ENV , EXPOSE , ONBUILD , USER , VOLUME , WORKDIR .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow