在我的Maven项目中,我具有以下结构:
docker/
docker-compose.yml
A/
Dockerfile
B/
Dockerfile
src/
target/
foo.war
Run Code Online (Sandbox Code Playgroud)
在A的Dockerfile中,我需要使用/target以下命令访问文件夹中的war :
COPY ../../target/foo.war /usr/local/tomcat/webapps/foo.war
Run Code Online (Sandbox Code Playgroud)
当我运行docker-compose uptt给我错误
生成失败: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"
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何解决吗?我不想在每个项目构建后手动复制war文件。
假设您有以下目录结构
./docker-compose.yaml
./all-runners/
/start.sh
/runner-A/Dockerfile
/runner-B/Dockerfile
/runner-C/Dockerfile
Run Code Online (Sandbox Code Playgroud)
它将ALWAYS从其相对路径加载,将自身的当前目录作为对local您指定路径的引用。
COPY start.sh /runtime/start.sh
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
all-runners,文件start.sh将被 中路径指定的每个单独的 Dockerfile 重用dockerfile。现在您的构建可以使用Dockerfile. 当您进行正确的映射时,结果是一样的!
快乐泊坞!
据我所知,不可能访问构建上下文之外的东西。
dockerfile通过将该指令与context项目根目录中的 compose 文件中的指令混合,您可能会有一些运气,如下所示:
build:
context: .
dockerfile: A/Dockerfile
Run Code Online (Sandbox Code Playgroud)
您可能希望.dockerignore在项目根目录中包含 a ,以防止整个项目被发送到 docker 守护进程,从而导致构建速度可能慢得多。
| 归档时间: |
|
| 查看次数: |
5247 次 |
| 最近记录: |