在我的Maven项目中,我具有以下结构:
docker/
docker-compose.yml
A/
Dockerfile
B/
Dockerfile
src/
target/
foo.war
在A的Dockerfile中,我需要使用以下命令访问/target
文件夹中的war:
COPY ../../target/foo.war /usr/local/tomcat/webapps/foo.war
当我运行docker-compose up
时tt给我错误
构建失败:COPY失败:构建之外的禁止路径 上下文:../../ target / foo.war
docker-compose.yml
version: '3.6'
services:
fooA:
build: ./docker/A
ports:
- "8080:8080"
depends_on:
- fooB
fooB:
build: ./docker/fooB
ports:
- "5433:5433"
您能告诉我如何解决吗?我不想在每次构建项目后手动复制war文件。
答案 0 :(得分:2)
据我所知,无法在构建上下文之外访问其他内容。
在上下文中将dockerfile
指令与context
混合使用可能会有些运气。
build:
context: .
dockerfile: A/Dockerfile
您可能希望在项目根目录中包含.dockerignore
,以防止将整个项目发送到docker守护程序,从而可能会降低构建速度。
答案 1 :(得分:2)
您可以对项目进行结构化,以在目录树中将Compose文件和Dockerfile与您的目录树一样。您需要更改Compose文件以支持此操作,例如:
build:
context: ../
dockerfile: docker/A/Dockerfile
然后您可以使用docker-compose -f docker/docker-compose.yml build
建立此设置。
答案 2 :(得分:1)
假设您具有以下目录结构
./docker-compose.yaml
./all-runners/
/start.sh
/runner-A/Dockerfile
/runner-B/Dockerfile
/runner-C/Dockerfile
ALWAYS
将从其相对路径加载,并将其自身的当前目录作为对您指定路径的local
引用。
COPY start.sh /runtime/start.sh
shared
上下文目录是runtime
目录。
context
的目录中。 dockerfile
进行指定。 docker-compose.yml
如下
version: "3.3"
services:
runner-A
build:
context: ./all-runners
dockerfile: ./runner-A/Dockerfile
runner-B
build:
context: ./all-runners
dockerfile: ./runner-B/Dockerfile
runner-C
build:
context: ./all-runners
dockerfile: ./runner-C/Dockerfile
all-runners
,因此start.sh
中路径指定的每个单独的Dockerfile将重用文件dockerfile
。 现在,您的内部版本可以处理Dockerfile
目录外的文件。进行正确的映射后,结果是相同的!
快乐Dockering!