Docker

當文件存在時,為什麼 docker-compose 會發出“沒有這樣的文件或目錄”?

  • January 6, 2022

我正在測試我的伺服器的裸機恢復,它基本上用我的服務啟動了一組 docker 容器。我從備份中恢復/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

我很茫然為什麼它不起作用(docker文件在我試圖在這個DRP練習中複製的伺服器上正常工作)

我找到了一種解決方法(這並不完全是問題的答案,但允許繼續前進)。

  1. 我解除安裝了dockersnap 安裝: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.

引用自:https://serverfault.com/questions/1007807