Docker error response from daemon conflict the container name is already in use by container

Running the docker registry with below command always throws an error: dev:tmp me$ docker run -d --name registry-v1 -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -e

Ok, so I didn’t understand either, then I left my pc, went to do other things, and upon my return, it clicked :D

  1. You download a docker image file. docker pull *image-name* will just pull the image from docker hub without running it.

  2. Now, you use docker run, and give it a name (e.g. newWebServer).

    docker run -d -p 8080:8080 -v volume --name newWebServer image-name/version

You perhaps only need docker run --name *name* *image*, but the other stuff will become useful quickly.

-d (detached) — means the container will exit when the root process used to run the container exits.

-p (port) — specify the container port and the host port. Kind of the internal and external port. The internal one being the port the container uses, and the external one is the port you use outside of it and probably the one you need to put in your web browser if that’s how you access your app.

--name (what you want to call this instance of the container) — you could have several instances of the same container all with different names, which is useful when you’re trying to test something.

image-name/version is the actual image you want to create the container from. You can see a list of all the images on your system with docker images -a. You may have more than one version, so make sure you choose the correct one/tag.

-v (volume) — perhaps not needed initially, but soon you’ll want to persist data after your container exits.

OK. So now, docker run just created a container from your image. If it isn’t running, you can now start it with it’s name:

docker start newWebServer

You can check all your containers (they may or may not be running) with

docker ps -a

You can stop and start them (or pause them) with their name or the container id (or just the first few characters of it) from the CONTAINER ID column e.g:

docker stop newWebServer

docker start c3028a89462c

And list all your images, with

docker images -a

In a nutshell, download an image; docker run creates a container from it; start it with docker start (name or container id); stop it with docker stop (name or container id).

Here’s the log of a typical failure. I use ansible to run docker compose commands on one of the swarm nodes against the swarm.

TASK: [Run docker-compose up] ************************************************* 
failed: [XX.XX.XX.XX] => {"changed": true, "cmd": ["/usr/local/bin/docker-compose", "-f", "/containers/docker-compose/docker-compose-booking-pre-eng-811.yml", "--project-name", "booking-eng-811", "--verbose", "up", "-d"], "delta": "0:00:00.355991", "end": "2016-06-15 12:02:11.623256", "rc": 255, "start": "2016-06-15 12:02:11.267265", "warnings": []}
stderr: compose.config.config.find: Using configuration files: /containers/docker-compose/docker-compose-booking-pre-eng-811.yml
docker.auth.auth.load_config: Found 'auths' section
docker.auth.auth.parse_auth: Found entry (registry=u'my-private-registry', username=u'redacted-username')
compose.cli.command.get_client: docker-compose version 1.7.1, build 0a9ab35
docker-py version: 1.8.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
compose.cli.command.get_client: Docker base_url: http://127.0.0.1:4000
compose.cli.command.get_client: Docker version: KernelVersion=3.10.0-327.18.2.el7.x86_64, Os=linux, BuildTime=Fri May 27 17:25:03 UTC 2016, ApiVersion=1.22, Version=swarm/1.2.3, GitCommit=eaa53c7, Arch=amd64, GoVersion=go1.5.4
compose.cli.verbose_proxy.proxy_callable: docker inspect_network <- ('back')
compose.cli.verbose_proxy.proxy_callable: docker inspect_network -> {u'Containers': {u'0f4c1b89e2ae9476a53f07552f678d2914bb391d1d80ab051f74925eb9fbf65a': {u'EndpointID': u'5f07ba0940ffcb4b0c2f0acf5424b6976b28bd8344a56b0464ab6517da884bc8',
                                                                                       u'IPv4Address': u'10.0.0.3/24',
                                                                                       u'IPv6Address': u'',
                                                                                       u'MacAddress': u'02:42:0a:00:00:03',
                                                                                       u'Name': u'registrator_registrator_1'},
                 u'782c1d07d51f6871400da38e8840e81e9300f54a195b9e6ff2e931b23274655a': {u'EndpointID': u'c8654b5b73eaca7f630d6e2c4c898122a3ae6a86bd0cfab68a8654414fe4821a',
                                                                                       u'IPv4Address': u'10.0.0.2/24',
                                                                                       u'IPv6Address': u'',
                                                                                       u'MacAddress': u'02:42:0a:00:00:02',
                                                                                       u'Name': u'stdb1'},
...
compose.network.ensure: Network back declared as external. No new network will be created.
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=False, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=redis1', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=web', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=api_locations', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=booking', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('redis:2.8.21')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u'',
 u'Comment': u'',
 u'Config': {u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'redis-server'],
             u'Domainname': u'',
             u'Entrypoint': [u'/entrypoint.sh'],
             u'Env': [u'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
...
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('my-private-registry/web:master')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u"Emmet O'Grady",
 u'Comment': u'',
 u'Config': {u'ArgsEscaped': True,
             u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'/bin/sh', u'-c', u'/entrypoint.sh'],
             u'Domainname': u'',
             u'Entrypoint': None,
...
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('my-private-registry/api-locations:master')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u"Emmet O'Grady",
 u'Comment': u'',
 u'Config': {u'ArgsEscaped': True,
             u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'/bin/sh', u'-c', u'/entrypoint.sh'],
             u'Domainname': u'',
             u'Entrypoint': None,
...
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('my-private-registry/booking:eng-811')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u'',
 u'Comment': u'',
 u'Config': {u'ArgsEscaped': True,
             u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'/bin/sh', u'-c', u'/entrypoint.sh'],
             u'Domainname': u'',
             u'Entrypoint': None,
...
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=redis1', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.project._get_convergence_plans: web has upstream changes (redis1)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=web', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.project._get_convergence_plans: api_locations has upstream changes (redis1)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=api_locations', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.project._get_convergence_plans: booking has upstream changes (redis1)
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=booking', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.parallel.feed_queue: Pending: set([<Service: web>, <Service: redis1>, <Service: api_locations>, <Service: booking>])
compose.parallel.feed_queue: Starting producer thread for <Service: redis1>
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('redis:2.8.21')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u'',
 u'Comment': u'',
 u'Config': {u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'redis-server'],
             u'Domainname': u'',
             u'Entrypoint': [u'/entrypoint.sh'],
             u'Env': [u'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
...
compose.cli.verbose_proxy.proxy_callable: docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=bookingeng811', u'com.docker.compose.service=redis1', u'com.docker.compose.oneoff=False']})
compose.cli.verbose_proxy.proxy_callable: docker containers -> (list with 0 items)
compose.cli.verbose_proxy.proxy_callable: docker inspect_image <- ('redis:2.8.21')
compose.cli.verbose_proxy.proxy_callable: docker inspect_image -> {u'Architecture': u'amd64',
 u'Author': u'',
 u'Comment': u'',
 u'Config': {u'AttachStderr': False,
             u'AttachStdin': False,
             u'AttachStdout': False,
             u'Cmd': [u'redis-server'],
             u'Domainname': u'',
             u'Entrypoint': [u'/entrypoint.sh'],
             u'Env': [u'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
...
compose.service.build_container_labels: Added config hash: ae3be0880fdcb78073a419c6102617b730bfb42171c8204bf51e5c36eb8a85f3
compose.cli.verbose_proxy.proxy_callable: docker create_host_config <- (memswap_limit=None, links=[], devices=None, pid_mode=None, log_config={'Type': u'', 'Config': {}}, cpu_quota=None, read_only=None, dns=None, volumes_from=[], port_bindings={}, security_opt=None, extra_hosts=None, cgroup_parent=None, network_mode='back', shm_size=None, tmpfs=None, cap_add=None, restart_policy={u'MaximumRetryCount': 0, u'Name': u'always'}, dns_search=None, privileged=False, binds=[], ipc_mode=None, mem_limit='64M', cap_drop=None, ulimits=None)
compose.cli.verbose_proxy.proxy_callable: docker create_host_config -> {'Binds': [],
 'Links': [],
 'LogConfig': {'Config': {}, 'Type': u''},
 'Memory': 67108864L,
 'NetworkMode': 'back',
 'PortBindings': {},
 'RestartPolicy': {u'MaximumRetryCount': 0, u'Name': u'always'},
 'VolumesFrom': []}
compose.service.create_container: Creating bookingeng811_redis1_1
compose.cli.verbose_proxy.proxy_callable: docker create_container <- (name=u'bookingeng811_redis1_1', image='redis:2.8.21', labels={u'com.docker.compose.service': u'redis1', u'com.docker.compose.project': u'bookingeng811', u'com.docker.compose.config-hash': 'ae3be0880fdcb78073a419c6102617b730bfb42171c8204bf51e5c36eb8a85f3', u'com.docker.compose.version': u'1.7.1', u'com.docker.compose.oneoff': u'False', u'com.docker.compose.container-number': '1'}, host_config={'NetworkMode': 'back', 'Links': [], 'PortBindings': {}, 'Binds': [], 'RestartPolicy': {u'MaximumRetryCount': 0, u'Name': u'always'}, 'Memory': 67108864L, 'LogConfig': {'Type': u'', 'Config': {}}, 'VolumesFrom': []}, environment=[], volumes={}, detach=True, networking_config={u'EndpointsConfig': {'back': {u'IPAMConfig': {}, u'Aliases': ['redis1']}}})
compose.parallel.parallel_execute_iter: Failed: <Service: redis1>
compose.parallel.feed_queue: Pending: set([<Service: booking>, <Service: api_locations>, <Service: web>])
compose.parallel.feed_queue: <Service: booking> has upstream errors - not processing
compose.parallel.feed_queue: <Service: api_locations> has upstream errors - not processing
compose.parallel.feed_queue: <Service: web> has upstream errors - not processing
compose.parallel.parallel_execute_iter: Failed: <Service: booking>
compose.parallel.feed_queue: Pending: set([])
compose.parallel.parallel_execute_iter: Failed: <Service: api_locations>
compose.parallel.feed_queue: Pending: set([])
compose.parallel.parallel_execute_iter: Failed: <Service: web>
compose.parallel.feed_queue: Pending: set([])

ERROR: for redis1  Error response from daemon: Conflict. The name "/bookingeng811_redis1_1" is already in use by container 5ecf77fc7bbad0548cf34c891ac4d043b2692816b63ed97744924bc1296b8e65. You have to remove (or rename) that container to be able to reuse that name.
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1

I’ve tried removing the container called «bookingeng811_redis1_1» manually but it doesn’t exist anywhere.

Содержание

  1. При попытке старта селеноид контейнера с новыми параметрами получаю ошибку, что с таким именем контейнер уже существует, как это фиксится?
  2. Самые распространённые ошибки при работе с Docker
  3. Требования
  4. 1: Ошибки в Dockerfile
  5. 2: Конфликты имён
  6. 3: Проблемы взаимодействия контейнеров
  7. Заключение

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

Есть список docker контейнеров.

Контейнер selenoid работает с параметрами:

Мне нужно выставить -session-delete-timeout 10m.
Выполняю команду sudo ./cm_linux_amd64 selenoid start —args «session-delete-timeout 10m» (предварительно останавливаю selenoid контейнер)
Получаю ошибку:

1) Я правильно понимаю, что мне надо удалить контейнер с именем selenoid_selenoid_1 (судя по скрину)?
2) Не совсем понятно, почему при старте пытается создаться новый контейнер (судя по ошибке), мы ведь стартуем уже существующий контейнер, который просто в стопе находится. Т.е. я либо не совсем понимаю, что делает команда, либо некорректная ошибка
3) Опасаюсь, что, возможно, потеряются какие-то важные настройки. Или при новом старте контейнера по образу всё должно восстановиться?
4) Если какая-то другая последовательность действий должна быть, то какая?

  • Вопрос задан более двух лет назад
  • 698 просмотров

@SuperTester777
лень лезть в документацию ?
docker container prune -f и
docker container rm
или даже

оно кстати там так прямо и написано

You have to remove (or rename) that container to be able to reuse that name.

Источник

Самые распространённые ошибки при работе с Docker

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

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

Требования

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

1: Ошибки в Dockerfile

Наибольшее количество ошибок обычно сосредоточено в Dockerfile.

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

Образ Docker – это ресурс, предназначенный только для чтения, который создаётся с помощью файла под названием Dockerfile. Образы можно выкладывать на Docker Hub.

Контейнер – это экземпляр приложения, который создаётся с помощью образа.

Dockerfile подробно описывает пошаговый процесс, с помощью которого Docker создаёт образ. Каждая строка в Dockerfile описывает один из этапов процесса. Таким образом, если Docker переходит на новый этап, значит, предыдущие этапы выполнены без ошибок.

Создайте небольшой проект, чтобы на его примере рассмотреть несколько общих ошибок Dockerfile. Создайте каталог docker_image в домашнем каталоге. Затем создайте в нём Dockerfile.

Добавьте в файл такие строки:

# base image
FROM debian:latest
# install basic apps
RUN aapt-get install -qy nano

В этом файле специально сделана опечатка. Можете её найти? Попробуйте создать образ с помощью этого файла и посмотрите, что скажет Docker.

docker build -t my_image

Step 2 : RUN aapt-get install -qy nano
—> Running in 085fa10ffcc2
/bin/sh: 1: aapt-get: not found
The command ‘/bin/sh -c aapt-get install -qy nano’ returned a non-zero code: 127

Из этого сообщения об ошибке следует, что во второй команде допущена ошибка. Как уже говорилось, это сделано намеренно: вместо команды apt-get в файле указана команда aapt-get. Первый этап выполнен без ошибок, а на втором Docker обнаруживает опечатку.

Исправьте опечатку в Dockerfile:

# install basic apps
RUN apt-get install -qy nano

Снова запустите docker build:

docker build -t my_image

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> ddf73f48a05d
Step 2 : RUN apt-get install -qy nano
—> Running in 9679323b942f
Reading package lists.
Building dependency tree.
E: Unable to locate package nano
The command ‘/bin/sh -c apt-get install -qy nano’ returned a non-zero code: 100

Теперь процесс проходил немного быстрее: Docker кэширует удачно выполненные этапы, чтобы потом не перевыполнять их. Однако потом возникла новая ошибка.

Дистрибутив Debian, на котором основан образ, не может найти текстовый редактор nano, хотя он точно доступен в репозитории Debian. Базовый образ собирается из кэшированных метаданных: репозиториев и списков доступных пакетов. Вероятно, при кэшировании произошла ошибка.

Чтобы исправить её, отредактируйте Dockerfile и добавьте в него чистку и обновление исходных файлов перед установкой новых пакетов:

Добавьте в файл такую строку:

# base image
FROM debian:latest
# clean and update sources
RUN apt-get clean && apt-get update
# install basic apps
RUN apt-get install -qy nano

Сохраните и закройте файл. Запустите docker build:

docker build -t my_image

Теперь процесс будет выполнен успешно:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> a24c3183e910
Step 2 : RUN apt-get install -qy nano
—> Running in 2237d254f172
Reading package lists.
Building dependency tree.
Reading state information.
Suggested packages:
spell
The following NEW packages will be installed:
nano
.
—> 64ff1d3d71d6
Removing intermediate container 2237d254f172
Successfully built 64ff1d3d71d6

Добавьте в образ Python 3 и базу данных PostgreSQL. Откройте Dockerfile:

Вставьте такие строки:

# base image
FROM debian:latest
# clean and update sources
RUN apt-get clean && apt-get update
# install basic apps
RUN apt-get install -qy nano
# install Python and modules
RUN apt-get install -qy python3
RUN apt-get install -qy python3-psycopg2

Сохраните и закройте файл. Соберите образ.

docker build -t my_image

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

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> ddf73f48a05d
Step 2 : RUN apt-get clean && apt-get update
—> Using cache
—> 2c5013476fbf
Step 3 : RUN apt-get install -qy nano
—> Using cache
—> 4b77ac535cca
Step 4 : RUN apt-get install -qy python3
—> Running in 93f2d795fefc
Reading package lists.
Building dependency tree.
Reading state information.
The following extra packages will be installed:
krb5-locales libgmp10 libgnutls-deb0-28 libgssapi-krb5-2 libhogweed2
libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 libnettle4
libp11-kit0 libpq5 libsasl2-2 libsasl2-modules libsasl2-modules-db
libtasn1-6
Suggested packages:
gnutls-bin krb5-doc krb5-user libsasl2-modules-otp libsasl2-modules-ldap
libsasl2-modules-sql libsasl2-modules-gssapi-mit
libsasl2-modules-gssapi-heimdal python-psycopg2-doc
The following NEW packages will be installed:
krb5-locales libgmp10 libgnutls-deb0-28 libgssapi-krb5-2 libhogweed2
libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 libnettle4
libp11-kit0 libpq5 libsasl2-2 libsasl2-modules libsasl2-modules-db
libtasn1-6 python3-psycopg2
0 upgraded, 18 newly installed, 0 to remove and 0 not upgraded.
Need to get 5416 kB of archives.
After this operation, 10.4 MB of additional disk space will be used.
.
Processing triggers for libc-bin (2.19-18+deb8u6) .
—> 978e0fa7afa7
Removing intermediate container d7d4376c9f0d
Successfully built 978e0fa7afa7

Примечание: Docker кэширует процесс сборки. Потому иногда при сборке образа используются устаревшие исходные файлы. Чтобы избежать этого, добавьте в Dockerfile чистку и обновление исходников. Если при установке или обновлении пакетов возникает ошибка, запустите внутри контейнера команду:

apt-get clean && apt-get update

Внимательно читайте вывод Docker, чтобы отследить опечатки. Своевременно обновляйте исходные файлы, чтобы избежать ошибок, вызванных кэшированными списками пакетов.

Синтаксические ошибки и ошибки кэширования – наиболее распространенные проблемы, с которыми вы можете столкнуться при создании образа Docker. Теперь давайте рассмотрим проблемы, которые могут возникнуть при работе с контейнерами, созданными на основе этих образов.

2: Конфликты имён

Чем больше вы запускаете контейнеров, тем выше вероятность возникновения конфликта имён.

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

Используйте созданный ранее образ, чтобы запустить контейнер. Затем, чтобы протестировать его работу, запустите интерактивный интерпретатор bash внутри этого контейнера.

docker run -ti my_image bash

После запуска контейнера вы увидите командную строку root:

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

Запуская контейнер так, как показано выше, не указывая имя, Docker присваивает ему случайное имя. Чтобы просмотреть список запущенных контейнеров, запустите на хосте Docker команду:

Примечание: Команду нужно запускать вне контейнера.

Откройте терминал хоста Docker и запустите:

Эта команда выведет список запущенных контейнеров:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 22 seconds ago Up 28 seconds loving_brahmagupta

Как видите, Docker выбрал для только что запущенного контейнера случайное имя, и в данном случае это loving_brahmagupta (вероятно, в вашем случае имя будет отличаться). Позволять Docker присваивать контейнерам случайные имена можно в некоторых простых случаях. Однако это может повлечь серьёзные проблемы. При развёртывании объемного проекта нужно присвоить контейнерам имена самостоятельно, чтоб иметь возможность ссылаться на них и автоматизировать их работу.

Чтобы задать имя контейнера, используйте при запуске аргумент –name. Также вы можете переименовать запущенный контейнер. Имя контейнера должно быть описательным.

Запустите следующую команду в терминале хоста Docker:

docker rename your_container_name python_box

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

Теперь контейнер loving_brahmagupta называется python_box:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 24 minutes ago Up 24 minutes python_box

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

Также контейнер можно остановить с помощью команды kill из другого терминала хоста Docker:

docker kill python_box

В таком случае Docker возвращает имя остановленного контейнера:

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

Контейнер python_box в списке нет:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

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

docker run —name python_box -ti my_image bash
docker: Error response from daemon: Conflict. The name «/python_box» is already in use by container 80a0ca58d6ecc80b305463aff2a68c4cbe36f7bda15e680651830fc5f9dda772. You have to remove (or rename) that container to be able to reuse that name..
See ‘docker run —help’.

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

Итак, Docker говорит, что контейнер python_box уже существует, хотя только что этот контейнер был остановлен. Его даже нет в списке команды docker ps. Да, на данный момент он не запущен, но он всё ещё доступен. Вы остановили, но не удалили его. Команда docker ps показывает не все доступные, а только запущенные контейнеры.

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

Как видите, python_box всё-таки в списке:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 12 minutes ago Exited (137) 6 minutes ago python_box

Контейнер существует, его состояние – Exited (137). Потому пока что вы не можете создать контейнер с таким же именем: для этого нужно удалить контейнер.

Чтобы сделать это, введите в терминал:

docker rm python_box

Docker выведет на экран имя удалённого контейнера.

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

Теперь попробуйте снова создать контейнер по имени python_box:

docker run —name python_box -ti my_image bash

Процесс будет успешно выполнен, а на экране появится оболочка root:

Теперь остановите и удалите этот контейнер, чтобы избежать ошибок при дальнейшей работе. Откройте новый терминал на хосте Docker и выполните команду:

docker kill python_box && docker rm python_box

Эта команда состоит из двух команд, потому Docker выведет имя контейнера дважды:

При возникновении конфликтов имён используйте команду docker ps -a

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

3: Проблемы взаимодействия контейнеров

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

Создайте два взаимодействующих между собой контейнера: пусть первый будет контейнером Python на основе уже существующего образа, а второй будет запускать PostgreSQL.

Примечание: Официальный образ для контейнера PostgreSQL можно найти на Docker Hub.

Сначала создайте контейнер PostgreSQL. Присвойте ему имя с помощью аргумента –name (например, postgres_box).

Прежде контейнеры запускались на переднем плане, занимая терминал. Теперь нужно запустить контейнер PostgreSQL в фоновом режиме. Для этого используется флаг –detach.

Вместо команды bash запустите в контейнере команду postgres, которая запустит сервер баз данных PostgreSQL.

docker run —name postgres_box —detach postgres

Docker загрузит образ с Docker Hub и создаст контейнер. Затем он вернёт полный ID контейнера, запущенного в фоновом режиме:

Unable to find image ‘postgres:latest’ locally
latest: Pulling from library/postgres
6a5a5368e0c2: Already exists
193f770cec44: Pull complete
.
484ac0d6f901: Pull complete
Digest: sha256:924650288891ce2e603c4bbe8491e7fa28d43a3fc792e302222a938ff4e6a349
Status: Downloaded newer image for postgres:latest
f6609b9e96cc874be0852e400381db76a19ebfa4bd94fe326477b70b8f0aff65

Просмотрите список запущенных контейнеров:

В списке вы увидите запущенный в фоновом режиме контейнер postgres_box, который использует порт 5432 (стандартный порт PostgreSQL)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a230b56cd64 postgres_box «/docker-entrypoint.s» Less than a second ago Up 2 seconds 5432/tcp postgres

Теперь запустите контейнер Python. Чтобы программы внутри контейнера Python могли видеть сервисы внутри контейнера postgres_box, нужно вручную связать эти контейнеры с помощью флага –link.

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

docker run —name python_box —link postgres_box:postgres -ti my_image bash

Попробуйте подключиться к PostgreSQL из контейнера python_box.

Ранее вы установили nano в python_box. Используйте этот текстовый редактор, чтобы создать простой сценарий Python и подключиться к PostgreSQL. В терминал контейнера python_box введите:

root@3053f74c8c13: / # nano pg_test.py

Добавьте в файл:

«»»Test PostgreSQL connection.»»»
import psycopg2
conn = psycopg2.connect(user=’postgres’)
print(conn)

Сохраните и закройте файл. Попробуйте подключиться к БД с помощью этого сценария:

root@3053f74c8c13: / # python3 pg_test.py

В выводе говорится о том, что во время подключения произошла ошибка:

Traceback (most recent call last):
File «pg_test.py», line 5, in
conn = psycopg2.connect(database=»test», user=»postgres», password=»secret»)
File «/usr/lib/python3/dist-packages/psycopg2/__init__.py», line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket «/var/run/postgresql/.s.PGSQL.5432»?

Итак, контейнер postgres_box запущен и связан с python_box. В чём же проблема? Дело в том, что во время соединения не был указан хост БД, потому Python пытается подключиться к ней локально. Но это не сработает, так как сервис запущен не локально – он работает в другом контейнере, а это то же самое, что на другом компьютере.

Вы можете получить доступ к связанным контейнерам, указав имя, использованное в ссылке. В данном случае мы используем postgres для ссылки на контейнер postgres_box, который запускает сервер базы данных. Вы можете убедиться в этом, просмотрев файл /etc/hosts внутри контейнера python_box:

root@3053f74c8c13: / # cat /etc/hosts

Вы увидите все доступные хосты, их имена и IP. Сервер postgres тоже в списке:

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 postgres f6609b9e96cc postgres_box
172.17.0.3 3053f74c8c13

Отредактируйте сценарий Python и добавьте в него имя хоста. Откройте файл:

root@3053f74c8c13: / # nano pg_test.py

Укажите имя хоста:

«»»Test PostgreSQL connection.»»»
import psycopg2
conn = psycopg2.connect(host=’postgres’, user=’postgres’)
print(conn)

Сохраните и закройте файл. Снова запустите сценарий:

root@3053f74c8c13: / # python3 pg_test.py

Теперь сценарий выполнен успешно:

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

Заключение

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

Docker предоставляет флаг –debug. В основном этим флагом пользуются разработчики Docker. Однако если вы хотите узнать больше о внутреннем строении Docker, попробуйте запустить команды Docker в режиме отладки (это вернёт более подробный вывод):

docker -D [command] [arguments]

Контейнеры программного обеспечения существуют уже некоторое время, а сама система Docker – всего три года, потому иногда с ней бывает сложно. Чем чаще вы будете работать с Docker, тем больше у вас будет опыта: вы будете знать подводные камни, научитесь быстро справляться с рутинными задачами и устранять ошибки.

Источник

Am I even correctly following the documentation on creating and running a docker container below?

[root@ ~]# 
[root@ ~]# docker run -d 
>     --name basexhttp 
>     --publish 1984:1984 
>     --publish 8984:8984 
>     --volume "$HOME/basex/data":/srv/basex/data 
>     --volume "$HOME/basex/repo":/srv/basex/repo 
>     --volume "$HOME/basex/webapp":/srv/basex/webapp 
>     basex/basexhttp:latest
4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e
[root@ ~]# 
[root@ ~]# docker run -ti 
>     --name basexhttp 
>     --publish 1984:1984 
>     --publish 8984:8984 
>     --volume "$(pwd)/basex/data":/srv/basex/data 
>     basex/basexhttp:latest
docker: Error response from daemon: Conflict. The container name "/basexhttp" is already in use by container "4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
[root@ ~]# 
[root@ ~]# 
[root@ ~]# docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@ ~]# 
[root@ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@ ~]# 
[root@ ~]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS                          PORTS               NAMES
4b827c082beb        basex/basexhttp:latest   "/usr/local/bin/mvn-…"   About a minute ago   Exited (1) About a minute ago                       basexhttp
[root@ ~]# 

referencing:

https://hub.docker.com/r/basex/basexhttp/

https://docs.basex.org/index.php?title=Docker&mobileaction=toggle_view_desktop

where I’ve copied/pasted what I think are the relevant commands.

asked Sep 4, 2020 at 4:54

Nicholas Saunders's user avatar

You’re attempting to create two different containers, each with the same name. Each time you execute docker run it will create a container, and you’ve named the containers the same with --name basexhttp. These names must be unique, even among stopped containers. To delete an unneeded container, you can stop and remove it with:

docker container stop basexhttp
docker container rm basexhttp

(Note that docker stop and docker rm also work, but it’s easier to read and understand the more verbose syntax)

answered Sep 4, 2020 at 12:44

BMitch's user avatar

BMitchBMitch

2,9307 silver badges15 bronze badges

Понравилась статья? Поделить с друзьями:
  • Docker error response from daemon cgroups cannot find cgroup mount destination unknown
  • Docker error response from daemon bad response from docker engine
  • Docker error pool overlaps with other one on this address space
  • Docker error during connect windows 10
  • Docker error during connect this error may indicate that the docker daemon is not running