我做了兩個這樣的檔案:
# 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參考與我想要的無關的目錄?
uj5u.com熱心網友回復:
使用選項提到的(第一個)Compose 檔案docker-compose -f是 in /home/john/work/docker,因此所有 Compose 檔案中的所有路徑都被認為是相對于該目錄的。
構建映像時,將其父級指定為構建背景關系:
build:
context: ../
相對于 Compose 檔案的目錄,這是該/home/john/work目錄。
Docker 會向自己發送背景關系目錄中所有內容的副本,而不是該目錄.dockerignore檔案中的內容。如果其中的子目錄不可讀,那么您將收到您描述的那種錯誤。
我猜您實際上并不是要將父目錄復制到影像中,您需要更改
build:
context: .
COPY仔細檢查 Dockerfile 中的檔案路徑:任何(and ) 指令的左側ADD總是相對于該context:目錄(洗掉了前導..和前導)。/
考慮準確命名 DockerfileDockerfile并將其放在專案的頂級目錄中以進一步簡化此操作。如果此構建片段僅在開發人員系統上使用但始終在那里使用,您還可以命名檔案docker-compose.override.yml,Compose 也會自動使用它。
# docker-compose.override.yml
# (only for development, not for production)
version: '3.8'
services:
website:
build: .
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/438356.html
