Как я могу получить (используя скрипт) идентификатор для использования с Docker Exec? - PullRequest
0 голосов
/ 08 января 2019

После запуска образа докера, как я могу программно получить идентификатор, чтобы я мог писать команды для этого образа? Я думаю, что ID, который я хочу, называется Container ID, потому что именно так он указан в выходных данных команды docker ps.

Например, я запускаю образ с помощью docker run, я запускаю команду docker ps, чтобы получить желаемый «идентификатор», а затем могу запустить docker logs или другие команды.

docker run myImage
docker ps
CONTAINER ID  IMAGE       COMMAND     CREATED 
1234567890    myImage     sleep 120   ...

Теперь, когда я знаю, что идентификатор контейнера равен 1234567890, я могу запускать команды для контейнера.

docker logs 1234567890
docker exec -it 1234567890 bash

Как получить этот идентификатор программным способом (при условии, что в данный момент запущен только один экземпляр этого образа).

Я попробовал эту команду, которая, как я думал, сработает, но она не сработала.

docker inspect --format='{{.Id}}' myImage
sha256:95e11.....

См. Также https://docs.docker.com/engine/reference/commandline/inspect/#examples.

Я думаю, что проверка проверяет только «образ», а не экземпляр, запущенный (контейнер).

Я надеюсь, что у меня есть правильная терминология, но если нет, дайте мне знать, и я исправлю это.

ПРИМЕЧАНИЕ. Если это имеет значение, это скрипт bash в Linux.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Также вы можете сделать таким образом

for container_id in $(docker ps  --filter="name=$myImage" -q -a);do docker rm $container_id;done
0 голосов
/ 08 января 2019

Вы можете получить идентификатор контейнера, отфильтровав его из определенного изображения.

docker ps -qf "ancestor=imagename"

ancestor: фильтровать контейнеры, которые используют данное изображение в качестве предка

-q: вывод только идентификатора

-f: для фильтрации

-l: показать последние

0 голосов
/ 08 января 2019

Если вы запустите отдельный контейнер (docker run -d ...), докер-клиент отправит идентификатор контейнера на стандартный вывод. Таким образом, вы можете сделать что-то вроде:

$ CONTAINER_ID=$(docker run -d myImage)
$ docker exec $CONTAINER_ID somecommand

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

$ docker run --name myContainer myImage
$ docker exec myContainer somecommand

Если вам просто нужен идентификатор самого последнего запущенного вами контейнера, вы можете использовать docker ps -lq:

$ CONTAINER_ID=$(docker ps -lq)
$ docker exec $CONTAINER_ID somecommand

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

$ CONTAINER_ID=$(docker container ps --filter ancestor=myImage -q)
$ docker exec $CONTAINER_ID somecommand
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...