Назад | Перейти на главную страницу

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

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

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

root@srv-backup:/etc/docker# docker-compose --verbose -f /etc/docker/docker-compose.d/20-registry.yaml up
compose.config.config.find: Using configuration files: /etc/docker/docker-compose.d/20-registry.yaml
ERROR: 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.yaml
services:
  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/registry
version: '3'

root@srv-backup:/# file /etc/docker/container-data/registry
/etc/docker/container-data/registry: directory

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

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

root@srv-backup:/# ps -ef | grep docker
root      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.json
root      2200  2048  0 10:58 ?        00:00:07 containerd --config /var/snap/docker/423/run/docker/containerd/containerd.toml --log-level error

Я совершенно не понимаю, почему это не работает (файл докера работает правильно на сервере, который я пытаюсь воспроизвести в этом упражнении 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-compose
chmod +x /usr/local/bin/docker-compose

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

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