Почему docker-compose выдает сообщение "Такого файла или каталога нет", когда файл там есть?

Я тестирую восстановление моего сервера с нуля, которое в основном запускает набор контейнеров docker с моими сервисами. Я восстановился из резервной копии /etc/docker, где я храню все конфигурационные и постоянные тома.

Затем я попытался запустить один из контейнеров:

root@srv-backup:/etc/docker# docker-compose --verbose -f /etc/docker/docker-compose.d/20-registry.yaml upcompose.config.config.find: Using configuration files: /etc/docker/docker-compose.d/20-registry.yamlERROR: compose.cli.main.main: .IOError: [Errno 2] No such file or directory: '/etc/docker/docker-compose.d/20-registry.yaml'

Однако файл находится там:

root@srv-backup:/# ll /etc/docker/docker-compose.d/20-registry.yaml-rwxrwxr-x+ 1 root root 842 Jan 24 15:19 /etc/docker/docker-compose.d/20-registry.yaml*root@srv-backup:/# cat /etc/docker/docker-compose.d/20-registry.yamlservices:  registry:    container_name: registry    image: registry    labels:      - traefik.http.routers.registry.rule=Host(`registry.example.com`)      - traefik.http.routers.registry.entryPoints=https      - traefik.http.routers.registry.tls=true      - traefik.http.routers.registry.tls.certresolver=le      - traefik.http.middlewares.lan.ipwhitelist.sourcerange=192.168.10.0/24, 192.168.20.0/24      - traefik.http.routers.registry.middlewares=lan      - traefik.enable=true    restart: unless-stopped    volumes:      - /etc/docker/container-data/registry:/var/lib/registryversion: '3'root@srv-backup:/# file /etc/docker/container-data/registry/etc/docker/container-data/registry: directory

Я перепробовал все виды заклинаний с относительными и полными путями - проблема та же.

Мне было интересно, имеет ли демон docker доступ к файлу, но он также работает как root:

root@srv-backup:/# ps -ef | grep dockerroot      2048     1  0 10:58 ?        00:00:08 dockerd -G docker --exec-root=/var/snap/docker/423/run/docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/var/snap/docker/423/run/docker.pid --config-file=/var/snap/docker/423/config/daemon.jsonroot      2200  2048  0 10:58 ?        00:00:07 containerd --config /var/snap/docker/423/run/docker/containerd/containerd.toml --log-level error

Я совершенно не понимаю, почему это не работает (файл docker корректно работает на сервере, который я пытаюсь реплицировать в этом упражнении DRP)

Я нашел обходной путь (это не совсем решение проблемы, но позволяет двигаться вперед).

  1. Я удалил docker мгновенная установка: snap remove docker
  2. Я установил docker из репозиториев: apt install docker.io
  3. Я установленный docker-compose:
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

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

Должно быть что-то особенное в версии snap для docker.

Это действительно помогло мне

pip3 install --upgrade --force-reinstall --no-cache-dir docker-compose && ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose

проблема может быть связана с версией python
docker-compose 1.27.x работает для меня с Python 3.6.x
для >= 1.28 потребуется 3.7.x
docker-compose >= 1.27 отказалась от поддержки Python 2.7

Я не знаю о более низких номерах версий

Это также может быть так же просто, как и у меня: просто запустите docker.

Сообщение об ошибке было немного раздражающим.