Bug 51693

Summary: C новым docker-engine нарушена работа docker-compose
Product: Branch p10 Reporter: Leonid Krivoshein <klark>
Component: docker-composeAssignee: cow <cow>
Status: CLOSED FIXED QA Contact: qa-p10 <qa-p10>
Severity: normal    
Priority: P5 CC: amakeenk, nbr, vladimir.didenko
Version: не указана   
Hardware: x86_64   
OS: Linux   

Description Leonid Krivoshein 2024-10-11 14:17:38 MSK
После обновления пакета docker-engine в репозиториях p10 и ниже до версии 27.1.1-alt1.x86_64 поломалась работа docker-compose.

Шаги воспроизведения:

1) Установить: apt-get install docker-engine docker-compose
2) Создать docker-compose.yaml в текущем каталоге:

version: "3"
services:
  hello_world:
    image: hello-world
    environment:
      ENV1: "val1"

3) Запустить в текущем каталоге: docker-compose up -d
4) Сделать изменения в docker-compose.yaml:

version: "3"
services:
  hello_world:
    image: hello-world
    environment:
      ENV1: "val2"

(здесь поменялось только значение)

4) Запустить снова docker-compose up -d

Ожидаемый результат: Контейнер удачно пересоздаётся

Полученный результат:

docker-compose up -d
Recreating root_hello_world_1 ...
 
ERROR: for root_hello_world_1  'ContainerConfig'
 
ERROR: for hello_world  'ContainerConfig'
Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 11, in <module>
    load_entry_point('docker-compose==1.27.4', 'console_scripts', 'docker-compose')()
  File "/usr/lib/python3/site-packages/compose/cli/main.py", line 67, in main
    command()
  File "/usr/lib/python3/site-packages/compose/cli/main.py", line 126, in perform_command
    handler(command, command_options)
  File "/usr/lib/python3/site-packages/compose/cli/main.py", line 1070, in up
    to_attach = up(False)
  File "/usr/lib/python3/site-packages/compose/cli/main.py", line 1066, in up
    cli=native_builder,
  File "/usr/lib/python3/site-packages/compose/project.py", line 648, in up
    get_deps,
  File "/usr/lib/python3/site-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/site-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/site-packages/compose/project.py", line 634, in do
    override_options=override_options,
  File "/usr/lib/python3/site-packages/compose/service.py", line 579, in execute_convergence_plan
    renew_anonymous_volumes,
  File "/usr/lib/python3/site-packages/compose/service.py", line 501, in _execute_convergence_recreate
    "Recreating",
  File "/usr/lib/python3/site-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/site-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/site-packages/compose/service.py", line 494, in recreate
    start_new_container=start, renew_anonymous_volumes=renew_anonymous_volumes
  File "/usr/lib/python3/site-packages/compose/service.py", line 613, in recreate_container
    quiet=True,
  File "/usr/lib/python3/site-packages/compose/service.py", line 332, in create_container
    previous_container=previous_container,
  File "/usr/lib/python3/site-packages/compose/service.py", line 917, in _get_container_create_options
    previous_container, container_options, override_options
  File "/usr/lib/python3/site-packages/compose/service.py", line 957, in _build_container_volume_options
    container_mounts
  File "/usr/lib/python3/site-packages/compose/service.py", line 1532, in merge_volume_bindings
    previous_container, volumes, tmpfs, mounts
  File "/usr/lib/python3/site-packages/compose/service.py", line 1562, in get_container_data_volumes
    container.image_config['ContainerConfig'].get('Volumes') or {}
KeyError: 'ContainerConfig'

Поле ContainerConfig отсутвует в docker inspect, в этой строчке д.б. Config:

    container.image_config['ContainerConfig'].get('Volumes') or {}

Проверенное исправление (для c9f2) в таске #359460.
Comment 1 Владимир Диденко 2024-10-11 16:35:39 MSK
Docker compose уже давно не поддерживается. Нужно использовать docker-compose-v2. Пакет docker-compose предлагаю выкинуть из репозитория. Можно сделать obsolete, чтобы у тех, у кого установлен docker-compose, прилетел docker-compose-v2.
Comment 2 Leonid Krivoshein 2024-10-14 16:47:25 MSK
(In reply to Владимир Диденко from comment #1)
> Docker compose уже давно не поддерживается. Нужно использовать
> docker-compose-v2. Пакет docker-compose предлагаю выкинуть из репозитория.
Хорошая идея.

> Можно сделать obsolete, чтобы у тех, у кого установлен docker-compose,
> прилетел docker-compose-v2.
Обсудили с выпускающими поддерживаемых бранчей. Да, стоит так сделать.
Comment 3 Владимир Диденко 2024-10-14 18:53:53 MSK
Сделал две таски

https://git.altlinux.org/tasks/359776 - для p11
https://git.altlinux.org/tasks/359773 - для p10

Сначала должно пройти задание для p11, потом p10, чтобы не получить docker-compose-v2 в p10 новее, чем в p11.
Comment 4 Владимир Диденко 2024-11-06 15:35:28 MSK
Задание дошло до p10 (в p11 и сизифе тоже пофикшено). Закрываю.