Docker将文件和卷挂载到相对路径,而无需使用UNIX / Windows特定的语法

时间:2020-11-12 02:41:57

标签: docker docker-compose

我正在尝试为Discord机器人编写一个Docker映像,该映像可以在我的Windows PC上运行以进行测试,也可以在Linux服务器上运行以进行生产。我希望能够在任何操作系统上Git提取我的代码,在此存储库中编辑配置文件,然后只需执行docker-compose up来生成并运行我的映像(该映像访问配置文件;我不想复制将其放入图片中,因为我可能需要编辑此文件而无需编辑代码/图片本身)。但是,这似乎是不可能的,因为我没有办法保证此配置文件所在的目录的位置。我在official Docker docs中看到了变通办法,说您应该使用$(pwd)/path/to/file来访问当前目录,但是,这仅在基于UNIX的系统中有效,并且仅在将其用作{{ 1}}命令。 docker build不接受使用$(pwd)%cd%,并抛出错误:

docker-compose.yml

我也已经尝试在yaml.scanner.ScannerError: while scanning for the next token found character '%' that cannot start any token path/to/file中都指定诸如./path/to/filedocker run -v <volume paths>之类的路径,但无济于事。尽管在docker-compose.yml中使用./path不会引发任何错误,但是在运行时在映像中找不到文件或目录。

我使用docker-compose.yml尝试此示例: Dockerfile

docker run

docker-compose.yml

FROM alpine
RUN ls /usr/src/testdir/

如果在与version: "3.8" services: test: build: ./ volumes: - ./testdir/:/usr/src/testdir 相同的文件夹中有一个名为docker-compose.yml的文件夹,并且其中有一个文件,则运行命令testdir返回:

docker-compose up

考虑到Docker的“一次写入,可在任何地方运行”的心态,我知道Docker并没有提供任何简单的方法来按相对路径装载卷,这让我感到震惊。有没有一种方法可以使用ls: /usr/src/testdir/: No such file or directory ERROR: Service 'test' failed to build : The command '/bin/sh -c ls /usr/src/testdir/' returned a non-zero code: 1 和/或docker-compose.yml中的相对路径,而无需使用特定于操作系统的语法?

1 个答案:

答案 0 :(得分:0)

我的解决方案

我的问题不一定与无法访问Docker中的相对路径有关。尽管通过docker run不容易使用相对路径(根据您的操作系统,您必须使用%cd%$(pwd)等),relative paths are supported in docker-compose.yml如David所指出。我试图在构建期间访问该卷,而在我的配置过程中这是不可能的。相反,我将在一个构建时层中复制配置文件,但是在运行映像时使用该卷。

其他资源