У меня возникла очень странная проблема, с которой, я надеюсь, кто-то сталкивался раньше.
У меня есть файл docker-compose, в котором находится служба Redis. Ничего особенного, я просто беру последнюю версию Redis из Docker Hub. Сегодня я приступил к повторному развертыванию и обычно запускаю --force-recreate
, чтобы отключить/поднять контейнеры, но когда я пытаюсь запустить --force-recreate
сегодня, я получаю странные ошибки, которых я раньше не видел (и вчера это работало нормально).
Как ни странно, выполнение обычных команд вниз/вверх работает и проблем нет. Я что-то пропустил?
Вот команды, которые позволяют выключить/включить мою систему без ошибок:
docker-compose -f docker-compose.prod.yml down
docker-compose -f docker-compose.prod.yml up -d
Вот команда, которая должна подойти, но она завершается с ошибкой «ContainerConfig» для docker-compose redis:
docker-compose -f docker-compose.prod.yml up -d --force-recreate
Выход...
docker-compose -f docker-compose.prod.yml up -d --force-recreate
Recreating app_redis_1 ...
ERROR: for app_redis_1 'ContainerConfig'
Traceback (most recent call last):
File "docker-compose", line 3, in <module>
File "compose/cli/main.py", line 81, in main
File "compose/cli/main.py", line 203, in perform_command
File "compose/metrics/decorator.py", line 18, in wrapper
File "compose/cli/main.py", line 1186, in up
File "compose/cli/main.py", line 1182, in up
File "compose/project.py", line 702, in up
File "compose/parallel.py", line 108, in parallel_execute
File "compose/parallel.py", line 206, in producer
File "compose/project.py", line 688, in do
File "compose/service.py", line 581, in execute_convergence_plan
File "compose/service.py", line 503, in _execute_convergence_recreate
File "compose/parallel.py", line 108, in parallel_execute
File "compose/parallel.py", line 206, in producer
File "compose/service.py", line 496, in recreate
File "compose/service.py", line 615, in recreate_container
File "compose/service.py", line 334, in create_container
File "compose/service.py", line 922, in _get_container_create_options
File "compose/service.py", line 962, in _build_container_volume_options
File "compose/service.py", line 1549, in merge_volume_bindings
File "compose/service.py", line 1579, in get_container_data_volumes
KeyError: 'ContainerConfig'
[88001] Failed to execute script docker-compose
Вот простая конфигурация docker-compose
для сервиса redis:
version: '3.8'
services:
redis:
image: redis:latest
restart: always
ports:
- "6379"
Ну, я чувствую себя глупо из-за этого, поэтому склонен удалить этот вопрос... но можете ли вы ответить на один вопрос? Почему docker-compose up -d --force-recreate
не работает, а с docker compose
не работает, в то время как обычные команды, которые я использовал, например docker-compose up -d
и docker-compose down
, работают нормально? Это как полуобновление, когда все docker-compose
команды начнут глючить одинаково?
Справедливости ради, он все равно должен работать. похоже, что в docker-compose закралась ошибка.
Я бы не стал чувствовать себя глупо или удалять вопрос. Я попал сюда только неделю спустя после того, как столкнулся с точно такой же проблемой при выполнении ежемесячной задачи по обновлению образа и перезапуску контейнера, который я запускал последние 3 года. Я предполагаю, что это результат обновления Debian, которое я выполнил пару недель назад, одновременно обновляя Docker. Думаю, я бы столкнулся с этой проблемой, если бы контейнеры не были настроены на перезапуск: если не остановлено
@dmakovec определенно не удаляет вопрос/ответ. Почему? Потому что моя промежуточная среда во всех аспектах является зеркалом моей производственной среды, но по «какой-то» причине моя проблема сохранялась в рабочей среде, но была/по-прежнему не имеет значения для подготовки. Я обновил обе среды, чтобы использовать новые команды, но это не очевидная проблема «просто используйте docker-compose вместо docker-compose» теперь, когда я увидел область действия, это странно, и я не могу полностью отладить, как было в журналах ошибок почти ничего полезного... в любом случае, я рад, что вы поняли свою проблему
Как отмечалось в бесчисленных сообщениях здесь и как отмечалось в комментариях @ChrisBecke, это было причиной устаревших команд в Docker. Сейчас 2024 год, и все обновилось.
По какой-то причине --force-recreate
с docker-compose
теперь не работает в моей производственной системе после обновлений системы, а docker compose up -d --force-recreate
работает как положено. (Обратите внимание на удаление -
)
Странно то, что я размещал на DigitalOcean и на днях запускал обновления через apt-get...
, и я заметил, что докер обновляется... но причину этой ошибки было нелегко выяснить, поэтому я и спросил здесь. Это также не повлияло на мою промежуточную среду, поэтому я не уверен, в чем причина того, что исходные команды не работают...
В 2024 году вам просто нужно использовать следующую команду «docker compose up»! Я попробовал и у меня получилось
Я очень рад, что вы решили свою проблему, для меня это была странная проблема, учитывая годы нормального использования. Однако я бы предложил добавить больше контекста к вашему ответу. В том виде, в котором вы сейчас это написали, без особой информации, вероятно, это должен быть комментарий... и этот комментарий был написан @ChrisBecke
Это было так просто. Спасибо за этот ответ.
Сейчас 20204 год. Используйте
docker compose
вместоdocker-compose
.