java - 访问 Dockerfile 中的上下文之外
问题描述
在我的 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 给我错误
构建失败:复制失败:构建上下文之外的禁止路径:../../target/foo.war
码头工人-compose.yml
version: '3.6'
services:
fooA:
build: ./docker/A
ports:
- "8080:8080"
depends_on:
- fooB
fooB:
build: ./docker/fooB
ports:
- "5433:5433"
你能告诉我如何解决这个问题吗?我不想在每个项目构建后手动复制战争文件。
解决方案
目录结构
假设您有以下目录结构
./docker-compose.yaml
./all-runners/
/start.sh
/runner-A/Dockerfile
/runner-B/Dockerfile
/runner-C/Dockerfile
- 我有一个要求,所有 Dockerfile 共享同一个文件
- 顶层 docker-compose 是所有构建的驱动程序
Dockerfile
它将ALWAYS
从其相对路径加载,将自身的当前目录作为对local
您指定路径的引用。
COPY start.sh /runtime/start.sh
码头工人组成
- 真正的诀窍就在这里。您要设置的上下文是您的主要内容所在的目录。
- 在此示例中,您的
shared
上下文目录是runtime
目录。- 想象一下这个目录下的所有文件都被复制到一个名为
context
. - 现在成像,您只需指定要复制到同一目录的 Dockerfile。您可以使用
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
. 当您进行正确的映射时,结果是一样的!
快乐 Dockering !
推荐阅读
- c# - C#/.NET 与 out 参数和空合并运算符一起使用时使用未分配的局部变量
- c++ - 为什么提升属性树 xml 序列化程序不能保留多行值?
- python-3.x - 2个选择框第一个带有字母,第二个带有以该字母开头的名称
- angular - 使用角度 8 的反应形式提交对象数组
- android - 如何使用 ViewPager2 从 FragmentStateAdapter 的位置获取片段
- sql - 使用 Mikro-orm 查询连接
- android - 使用与 Android Studio 在 Jenkins 中相同的 Gradle 版本
- jpa - 为什么 JPA 查询 left join on codition 不起作用?
- c++ - 我的 QT 没有桌面 qt 5.15.2 MinGW 64-bit
- shell - 当我用它创建文件时,为什么 echo 包含 -e ?