如何在docker-compose中挂载单个文件

5
我有一个项目需要将一个单独的目录挂载到Docker容器中,我会用类似的方式进行挂载。
agent:
    image: agent:latest
    container_name: agent
    volumes:
      - $PWD/status.txt:/status.txt

当我以"打开"模式修改status.txt时,会出现"Is A Directory"错误。
with open('status.txt','a') as f:
    ...
    ...

docker-compose 似乎把文件认作目录。

如果您能告诉我如何解决,我将不胜感激。


你的 docker-compose.yml 对我来说完全正常。如果你得到的是一个目录而不是一个文件,那就意味着从 Docker 的角度来看源文件不存在。你能告诉我们更多关于你的环境吗?你是在 Linux 下运行 Docker 吗?还是 MacOS?或者是 Windows? - larsks
@larsks 我在 Ubuntu 的 Linux 系统下运行 Docker。 - moluzhui
1
在卷映射中不要使用$PWD,而是使用./status.txt:/status.txt!当您从包含docker-compose.yml的另一个目录运行docker-compose时,使用$PWD可能会产生意外结果,而./status.txt始终将指向紧挨着docker-compose.ymlstatus.txt文件。 - acran
1个回答

0

我可以使用相同的语法挂载文件,尽管我使用相对路径,例如:

volumes:
 - ./sourcedir/file.txt:/target/dir/mountedfile.txt

mountedfile.txt 实际上就是 file.txt。你的环境中必定还有其他问题导致此问题发生。为了解决问题,你可以执行以下操作:

  1. 在容器中获取一个 shell,并在目标文件上运行 stat 命令,例如 stat mountedfile.txt。这应该可以告诉你它是一个文件还是目录。

  2. 使用普通的 docker 测试你的配置,使用 -v 来挂载卷,例如:

docker run --rm -ti -v /sourcedir/file.txt:/target/mountedfile.txt ubuntu:latest bash

此外,在(某种程度上)无关的答案中可能会有一些有用的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接