【问题标题】:Docker volume cannot overwrite file: "not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)?"Docker 卷无法覆盖文件:\"不是目录:未知:您是否正在尝试将目录挂载到文件(或反之亦然)?\"
【发布时间】: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


    【解决方案1】:

    好的,我发现了问题。

    这太愚蠢了,但我选择了一个不同的docker context,因此没有在我本地机器上的 docker 上工作。

    我刚刚选择了我的本地上下文 docker context use default,现在它按预期工作了。

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2011-07-13
      • 2016-03-12
      • 2016-05-07
      相关资源
      最近更新 更多