Случай использования для меня заключается в том, что мне нужно использовать контейнеры сторонних сервисов, таких как Mongodb и InfluxDb, как часть моей полной настройки сервиса docker. Контейнеры из этих сторонних сервисов могут или не могут существовать на моей машине. Я хочу использовать один и тот же контейнер и не позволять docker compose создавать их заново, если они уже существуют, и создавать их заново, если они не существуют.
Я создал файл docker compose, как показано ниже:
version: "3.7"
services:
mongo-database:
container_name: mongo
image: mongo:${Mongo_Service_Version}
restart: always
ports:
- "30041:27017"
networks:
- internal-network
volumes:
- data:/data/db
service-test:
container_name: service-test
image:service1:v1
restart: always
ports:
- "30091:80"
networks:
- internal-network
depends_on:
- mongo-database
Я создал службу mon go, а затем создал тест службы приложения, который зависит от службы mon go. (Примечание: Service-test предназначен только для демонстрационных целей)
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю команду docker -compose для запуска службы, я могу сделать это успешно. Компоновка docker сначала создает контейнер mon go, а затем контейнер службы, но проблема в том, что если контейнер mon go с таким именем и такой же конфигурацией уже существует, компоновка docker выдает ошибку, что контейнер с таким именем уже существует. Мой пример использования - я не хочу удалять старый контейнер вручную и воссоздавать его с помощью docker -compose. Я ожидаю, что docker compose достаточно умен, чтобы справиться с этой ситуацией. Docker compose не должен пытаться воссоздать контейнер, если он уже существует.
Если есть только обновление версии службы, и мы запускаем команду docker compose, docker compose ведет себя умно и не воссоздает контейнер mon go, но почему он не работает, когда контейнер mon go создается отдельно / вручную.