docker-compose ps не показывает запущенные сервисы - PullRequest
1 голос
/ 03 октября 2019

У меня есть стек docker-compose, запущенный на удаленном компьютере через CI / CD gitlab (бегун соединяется с механизмом докера на удаленном компьютере и выполняет развертывание с помощью docker-compose up -d).

КогдаЯ подключаюсь к этой машине с моего ноутбука, используя eval docker-machine env REMOTE_ADDRESS, вижу рабочие процессы докера (с docker ps), в то время как стек служб кажется пустым (docker-compose ps).

Яне могу использовать docker-compose down для остановки стека, и попытка docker-compose up -d дает мне ошибку

ERROR: for feamp_postgres  Cannot create container for service postgres: Conflict. The container name "/feamp_postgres" is already in use by container "40586885...". You have to remove (or rename) that container to be able to reuse that name.

Обратное также верно, я могу запустить стек с моего локального ноутбука (используя докер-машину), но затем происходит сбой конвейера CI / CD при попытке выполнить docker-compose up -d с той же ошибкой.

Это происходит с использованием последних версий docker и docker-compose, как на ноутбуке (OSX), так и набегун (Ubuntu 18.04).

В других обстоятельствах (~ 10 других проектов) это работало гладко.

Это файл docker-compose.yml, который я использую.

version: "3.7"

services:

  web:
    container_name: feamp_web
    restart: always
    image: guglielmo/fpa/feamp:latest
    expose:
      - "8000"
    links:
      - postgres:postgres
      - redis:redis
    environment:
      - ...
    volumes:
      - public:/app/public
      - data:/app/data
      - uwsgi_spooler:/var/lib/uwsgi
      - weblogs:/var/log
    command: /usr/local/bin/uwsgi --socket=:8000 ...

  nginx:
    container_name: feamp_nginx
    restart: always
    ...

  postgres:
    container_name: feamp_postgres
    restart: always
    image: postgres:11-alpine
    ...

  redis:
    container_name: feamp_redis
    restart: always
    image: redis:latest
    ...

volumes:
    ...

networks:
  default:
    external:
      name: webproxy

Обычно я могу получить стек от моего локального ноутбука и управляют им из конвейера CI / CD на gitlab или наоборот.

Эта диаграмма должна помочь визуализировать ситуацию.

                        +-----------------+                          
                        |                 |                          
                        |  Remote server  |                          
                        |                 |                          
                        +----|--------|---+                          
                             |        |                              
                             |        |                              
            docker-compose ps|        |docker-compose up -d          
                             |        |                              
                             |        |                              
+-------------------+        |        |        +--------------------+
|                   |        |        |        |                    |
|  Docker client 1  ---------+        +---------  Docker client 2   |
|                   |                          |                    |
+-------------------+                          +--------------------+

Подключение к удаленномумеханизм докера сервера выполняется через docker-machine.

Ответы [ 2 ]

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

Похоже, что указание имени проекта при вызове команд docker-compose решает проблему.

Это можно сделать с помощью параметра -p в командной строке или переменной среды COMPOSE_PROJECT_NAME воба клиенты .

По некоторым причинам это не требовалось в предыдущих проектах. Это может быть изменение в докере (я изменил с 18 на 19) или что-то еще, я до сих пор не знаю деталей.

0 голосов
/ 03 октября 2019

Вместо использования docker-compose ps вы можете попробовать docker ps -a и работать оттуда.

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

docker rm -f 40586885
docker network rm webproxy
...