Запустите образ Docker как контейнер


604

Я создал образ Docker из файла Docker. Я вижу, что изображение было успешно построено, но что мне с ним делать? Разве он не должен работать как контейнер?

Ответы:


856

Конкретный способ его запуска зависит от того, дали ли вы изображение тегу / имени или нет.

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

С именем (давайте используем Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

Без имени, просто используя идентификатор:

$ docker run -i -t 8dbd9e392a96 /bin/bash

Пожалуйста, смотрите Docker Run Reference для получения дополнительной информации.


4
Значит, понятные человеку имена, напечатанные под «ИМЯ», docker ps -aздесь не пригодятся?
ThorSummoner

11
docker psсписки контейнеров, а не изображений. Если вы хотите создать изображение из контейнера, вы должны docker commit. Вы можете использовать ИМЯ в коммите (например docker commit _NAME_ _imagename_)
Энди

8
@Andy Почему в конце мы используем / bin / bash? Я также новый
Рахил

6
@RaheelKhan Потому что вашему образу докера нужно что-то для запуска. Вы можете заменить это программой, которую вы установили. / bin / bash - это просто удобная оболочка, которая уже установлена.
Райан Шиллингтон

Если вам нужно добавить переменную окружения, вы можете выполнить docker: -i -t -e ROOT_PASSWORD = root ubuntu: 12.04
Баладжи Радхакришнан

70

Сделайте следующие шаги:

  1. $ docker images

    Вы получите список всех локальных изображений Docker с указанными тегами.

  2. $ docker run image_name:tag_name

    Если вы не укажете, tag_nameон автоматически запустит изображение с тегом «последний».

    Вместо этого image_nameвы также можете указать идентификатор изображения (без tag_name).


35
  • Чтобы перечислить изображения Docker

    $ docker images
    
  • Если ваше приложение хочет работать с портом 80, и вы можете предоставить другой порт для локального связывания, скажем, 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

Вы можете увидеть ваши доступные изображения, используя:

docker images

Затем вы можете работать в автономном режиме, чтобы ваш терминал все еще работал. У вас есть несколько вариантов его запуска с использованием имени репозитория (с тегом или без) или идентификатора изображения:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

Затем вы можете проверить, работает ли ваш контейнер, используя

docker ps

docker psдает вам идентификатор контейнера. Вы можете использовать его или только 2/3 первых символа, чтобы войти в ваш контейнер, используя:

docker exec -it container_id /bin/bash

И вы можете остановить это, используя docker stop container_idи docker rm container_id.

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


1
Параметр --rm (примечание: 2 черты не один) является золотым !!!, моя система завалена остановленными (мертвыми) контейнерами.
Йохан Сноугуз

13

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

docker images

Команда Docker run используется следующим образом:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

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

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

Куда:

--detach , -d        Run container in background and print container ID
--name                Assign a name to the container
--publish , -p        Publish a container’s port(s) to the host
--volume , -v        Bind mount a volume
--restart            Restart policy to apply when a container exits

Для получения дополнительной информации, пожалуйста, ознакомьтесь с официальной ссылкой на запуск Docker .


5

Вот пример для запуска службы webdev в Docker. Имя изображения - morrisjobke / webdav . Вы можете вытащить его из Docker Hub .

После запуска этих образов вы можете получить доступ к экземпляру WebDAV по адресу http://localhost:8888/webdav. Внутренне папка /var/webdavиспользуется в качестве корня WebDAV.

Вы можете запустить этот контейнер следующим образом:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

Re "запустить службу webdev" : Вы имеете в виду "запустить службу WebDAV" ? Или "запустить службу веб-разработки" ?
Питер Мортенсен

5

У меня такая же проблема. Я запустил свой образ Docker, и он создал контейнер с определенным CONTAINER_ID. Я хотел работать с тем же контейнером:

Сначала запустите ваш образ Docker:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

Затем перечислите все контейнеры, которые вы сделали:

sudo docker ps -a

И выберите контейнер, с которым вы хотите работать (у меня это 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

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

Команда $ docker imagesописывает, сколько изображений доступно в данный момент в локальном хранилище. а также

docker ps -a

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

Существует два способа запустить изображение в контейнере:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

В автономном режиме:

-d=false: Detached mode: Run container in the background, print new container id

В интерактивном режиме:

-i :Keep STDIN open even if not attached

Вот команда запуска Docker

$ docker run image_name:tag_name

Для получения дополнительной информации о запуске Docker вы можете обратиться к справке по Docker .

Это лучший материал для понимания Docker.


2

Чтобы просмотреть список всех изображений на вашем хосте Docker, запустите:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

Теперь вы можете запустить образ Docker как контейнер в интерактивном режиме:

   $ docker run -it apache_snapshot /bin/bash

ИЛИ, если у вас нет изображений локально, найдите в Docker Hub изображение для загрузки:

    $ docker search ubuntu
    NAME                            DESCRIPTION             STARS  OFFICIAL  AUTOMATED
    ubuntu                          Ubuntu is a Debian...   6759   [OK]       
    dorowu/ubuntu-desktop-lxde-vnc  Ubuntu with openss...   141              [OK]
    rastasheep/ubuntu-sshd          Dockerized SSH ser...   114              [OK]
    ansible/ubuntu14.04-ansible     Ubuntu 14.04 LTS w...   88               [OK]
    ubuntu-upstart                  Upstart is an even...   80     [OK]

Извлеките образ Docker из репозитория с помощью команды docker pull:

     $ docker pull ubuntu

Запустите образ Docker как контейнер:

     $ docker run -it ubuntu /bin/bash


-1

Для тех, у кого была такая же проблема, но возникла ошибка вроде

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"

Я добавил точку входа, которая работала для меня:

docker run -it --entrypoint /bin/sh для изображений без Bash.

Пример (из утвержденного примера):

run -it --entrypoint /bin/sh ubuntu:12.04

Ссылка: https://gist.github.com/mitchwongho/11266726

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.