【发布时间】:2023-01-03 02:36:42
【问题描述】:
我有一个 docker-compose 应该启动一个特使代理。
这在几个月前工作得很好。今天我继续做这个项目,突然我的设置停止工作了。我不能再启动 docker-compose 了。
> docker-compose up
Attaching to envoy-envoy-1
Error response from daemon: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/fabi/IdeaProjects/realitycheck/server/envoy/envoy.yaml" to rootfs at "/etc/envoy/envoy.yaml": mount /home/fabi/IdeaProjects/realitycheck/server/envoy/envoy.yaml:/etc/envoy/envoy.yaml (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
docker-compose.yaml 文件如下所示:
version: '3'
services:
envoy:
image: envoyproxy/envoy:v1.24-latest
ports:
- "8002:8002"
volumes:
- ./envoy.yaml:/etc/envoy/envoy.yaml:ro
environment:
ENVOY_UID: "0"
ENVOY_GID: "0"
network_mode: host
如您所见,我想将本地envoy.yaml文件挂载到docker容器中的/etc/envoy/envoy.yaml中。
我的本地目录如下所示:
> ls -la
total 16
drwxr-xr-x 2 fabi fabi 4096 Jan 2 11:19 ./
drwxr-xr-x 6 fabi fabi 4096 Aug 10 14:41 ../
-rw-r--r-- 1 fabi fabi 478 Jan 2 10:54 docker-compose.yaml
-rw-r--r-- 1 fabi fabi 3722 Aug 12 15:05 envoy.yaml
出于某种原因,docker 认为该文件是一个目录(或者它看起来是这样)。
我试过的:
删除所有图像、卷和容器并重新下载/创建所有内容
根据对此的回答:Are you trying to mount a directory onto a file (or vice-versa)?
这并没有改变任何东西。仍然是同样的错误。
从卷条目中删除了 ro 修饰符
这并没有改变任何东西。仍然是同样的错误。
重新启动 docker 守护进程并重新启动我的机器
这并没有改变任何东西。仍然是同样的错误。
在 docker 下重现相同的行为
为了确保它不是docker-compose 问题,我运行了以下命令并得到了同样的错误:
> docker run --rm -e ENVOY_UID=0 -e ENVOY_GID=0 -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml -p 8002:8002 --network=host envoyproxy/envoy:v1.24-latest
同样的错误:
WARNING: Published ports are discarded when using host network mode
docker: Error response from daemon: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/fabi/IdeaProjects/realitycheck/server/envoy/envoy.yaml" to rootfs at "/etc/envoy/envoy.yaml": mount /home/fabi/IdeaProjects/realitycheck/server/envoy/envoy.yaml:/etc/envoy/envoy.yaml (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
我查看了容器,看看它在里面是什么样子,并确保确实有一个 /etc/envoy,并且该目录中还有一个名为 envoy.yaml 的文件,这对它们都是正确的:
> docker run --rm -e ENVOY_UID=0 -e ENVOY_GID=0 -p 8002:8002 --network=host --entrypoint "ls" envoyproxy/envoy:v1.24-latest -la /etc/envoy
这产生了:
WARNING: Published ports are discarded when using host network mode
total 12
drwxr-xr-x 1 root root 4096 Dec 6 14:16 .
drwxr-xr-x 1 root root 4096 Jan 2 15:06 ..
-rw-r--r-- 1 root root 1817 Dec 6 14:14 envoy.yaml
这意味着那里是容器中的 /etc/envoy/envoy.yaml 文件。
然后我尝试将文件以不同的文件名挂载到容器中,可能存在docker无法覆盖容器中文件的问题.
docker run --rm -e ENVOY_UID=0 -e ENVOY_GID=0 -v $(pwd)/envoy.yaml:/etc/envoy/envoy2.yaml -p 8002:8002 --network=host --entrypoint "ls" envoyproxy/envoy:v1.24-latest -la /etc/envoy
哪个产生:
WARNING: Published ports are discarded when using host network mode
total 20
drwxr-xr-x 1 root root 4096 Jan 2 15:09 .
drwxr-xr-x 1 root root 4096 Jan 2 15:09 ..
-rw-r--r-- 1 root root 1817 Dec 6 14:14 envoy.yaml
drwxr-xr-x 2 root root 4096 Nov 7 21:27 envoy2.yaml
所以现在我有信心,我能够挂载文件,并且(对我而言)它看起来不像是权限问题。
看起来只有当我想挂载时才会出现错误超过现有文件。
所以我的大问题是:我在这里做错了什么?为什么我不能再将配置文件挂载到我的容器中,直到几个月前我还可以这样做。或者这是 docker 中的错误?
版本:
- 我的机器是 Arch linux
6.1.1-arch1-1 Docker version 20.10.22, build 3a2c30b63a-
Docker Compose version 2.14.2
所有版本都是来自官方 arch repo 的最新版本。
我将不胜感激任何帮助!
【问题讨论】:
标签: linux docker docker-compose