docker-撰写上下文引用不相关的目录
docker-compose context references directories that are not related
我做了两个这样的文件:
# file: /home/john/work/docker/build.yml
version: "3.8"
services:
website:
build:
context: ../
dockerfile: ./docker/docker-files/build.dockerfile
entrypoint: ["tail", "-f", "/dev/null"]
# file: /home/john/work/docker/docker-files/build.dockerfile
FROM mysql:latest
然后我运行执行以下命令:
cd /home/john/work/docker
docker-compose -f build.yml up --build -d
但这给出了错误
error checking context: 'no permission to read from '/home/john/work/db/docker-john/mongo/WiredTiger''.
我不明白为什么错误会提到/home/john/work/db/docker-john/mongo/WiredTiger
?它甚至与我的 docker 项目无关,我也没有提及它!如果我删除目录 /home/john/work/db
,那么我的 docker-compose -f build.yml up --build -d
就可以正常工作了。
这是怎么回事?为什么 docker-compose
引用的目录与我想要的无关?
docker-compose -f
选项提到的(第一个)Compose 文件在 /home/john/work/docker
中,因此所有 Compose 文件中的所有路径都被认为是相对于该目录的。
构建图像时,将其父级指定为构建上下文:
build:
context: ../
相对于 Compose 文件的目录,这是 /home/john/work
目录。
Docker 向自己发送上下文目录中所有内容的副本,减去该目录 .dockerignore
file 中的内容。如果其中的一个子目录不可读,那么您将遇到您描述的那种错误。
我猜你不是真的要将父目录复制到镜像中,你需要更改
build:
context: .
Double-check Docker 文件中的文件路径:任何 COPY
(和 ADD
)指令的 left-hand 端总是相对于此 context:
目录(删除了前导 ..
和前导 /
)。
考虑将 Docker 文件准确命名为 Dockerfile
并将其放在项目的 top-level 目录中以进一步简化。如果此构建片段仅在开发人员系统上使用但始终在那里使用,您还可以将文件命名为 docker-compose.override.yml
和 Compose will automatically use that。
# docker-compose.override.yml
# (only for development, not for production)
version: '3.8'
services:
website:
build: .
我做了两个这样的文件:
# file: /home/john/work/docker/build.yml
version: "3.8"
services:
website:
build:
context: ../
dockerfile: ./docker/docker-files/build.dockerfile
entrypoint: ["tail", "-f", "/dev/null"]
# file: /home/john/work/docker/docker-files/build.dockerfile
FROM mysql:latest
然后我运行执行以下命令:
cd /home/john/work/docker
docker-compose -f build.yml up --build -d
但这给出了错误
error checking context: 'no permission to read from '/home/john/work/db/docker-john/mongo/WiredTiger''.
我不明白为什么错误会提到/home/john/work/db/docker-john/mongo/WiredTiger
?它甚至与我的 docker 项目无关,我也没有提及它!如果我删除目录 /home/john/work/db
,那么我的 docker-compose -f build.yml up --build -d
就可以正常工作了。
这是怎么回事?为什么 docker-compose
引用的目录与我想要的无关?
docker-compose -f
选项提到的(第一个)Compose 文件在 /home/john/work/docker
中,因此所有 Compose 文件中的所有路径都被认为是相对于该目录的。
构建图像时,将其父级指定为构建上下文:
build:
context: ../
相对于 Compose 文件的目录,这是 /home/john/work
目录。
Docker 向自己发送上下文目录中所有内容的副本,减去该目录 .dockerignore
file 中的内容。如果其中的一个子目录不可读,那么您将遇到您描述的那种错误。
我猜你不是真的要将父目录复制到镜像中,你需要更改
build:
context: .
Double-check Docker 文件中的文件路径:任何 COPY
(和 ADD
)指令的 left-hand 端总是相对于此 context:
目录(删除了前导 ..
和前导 /
)。
考虑将 Docker 文件准确命名为 Dockerfile
并将其放在项目的 top-level 目录中以进一步简化。如果此构建片段仅在开发人员系统上使用但始终在那里使用,您还可以将文件命名为 docker-compose.override.yml
和 Compose will automatically use that。
# docker-compose.override.yml
# (only for development, not for production)
version: '3.8'
services:
website:
build: .