¿Por qué docker-compose emite un "No existe tal archivo o directorio" cuando el archivo está allí?

Estoy probando una recuperación básica de mi servidor que básicamente inicia un conjunto de contenedores docker con mis servicios. Me recuperé de una copia de seguridad /etc/docker, donde guardo todos los volúmenes de configuración y persistentes.

Luego intenté iniciar uno de los contenedores:

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'

Sin embargo, el archivo está ahí:

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

Probé todo tipo de encantamientos con rutas relativas y completas, el problema es el mismo.

Me preguntaba si el demonio de la ventana acoplable tiene acceso al archivo, pero también se ejecuta como 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

No sé por qué no funciona (el archivo docker funciona correctamente en el servidor que estoy tratando de replicar en este ejercicio de DRP)

Encontré una solución alternativa (esto no es exactamente una respuesta al problema, pero permite avanzar).

  1. He desinstalado el docker instalación rápida: snap remove docker
  2. He instalado docker de los repositorios: apt install docker.io
  3. I instalar 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

Ahora el comando que usé para iniciar el contenedor de ejemplo funciona.

Debe haber algo especial con la versión snap de docker.

Esto realmente me ayudó

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

el problema podría estar relacionado con la versión de Python
docker-compose 1.27.x se ejecuta para mí con Python 3.6.x
para >= 1.28, se necesitaría 3.7.x
docker-compose >= 1.27 se eliminó el soporte para Python 2.7

No tengo conocimiento de números de versión más bajos

También podría ser tan simple como lo fue para mí:simplemente inicie docker.

El mensaje de error era un poco irritante.