我要完成的工作是:我想在容器内缓存当前用户~/.aws
目录,以便在构建另一个容器时可以使用它们。
我有以下docker-compose.yml:
version: "3.7"
services:
worker:
depends_on:
- aws
aws:
build:
context: ~/.aws
dockerfile: ./ctx.dockerfile
args:
- workdir=/root/.aws
这些是ctx.dockerfile
的内容:
FROM alpine:3.9
ARG workdir
WORKDIR ${workdir}
COPY . .
在我的worker
服务Dockerfile中,我具有以下内容:
...
COPY --from=aws_ctx:local /root/.aws /root/.aws
...
docker compose并未将dockerfile
服务中的aws
路径视为相对于docker-compose.yml的路径,而是假设它相对于context
路径。无论如何,我可以让docker-compose从与docker-compose.yml相同的目录中加载ctx.dockerfile
并按我的方式设置上下文吗?
我愿意改变问题的解决方法,但是有一些限制:
答案 0 :(得分:0)
无论如何,我是否可以让docker-compose从与docker-compose.yml相同的目录中加载ctx.dockerfile并按我的方式设置上下文?
AFAIK:不,没有。
在构建时与Dockerfile进行交互的所有内容都必须在定义的上下文中。因此,您需要.aws
和docker-compose.yml
等所在的当前文件夹位于同一上下文中,即该上下文必须是相关目录结构的最高级别,然后您将定义所需文件(Dockerfile和.aws
)的相对路径。
也许您可以 将/home/$USER
设置为构建上下文(或更高级别,具体取决于Dockerfile等的生存位置),但是随后您还必须创建一个{{ 1}}文件,并忽略.dockerignore
和当前文件夹之外的上下文中的一切。如您所见,这将是一团糟,而且不是很可重复。
我建议您使用一个卷而不是.aws
来放置容器中的COPY
文件夹。
示例:
~/.aws
nico@lapap12:~$ ls -l ~/.aws
total 0
-rw-r--r-- 1 nico nico 0 May 22 17:45 foo.bar
:
docker-compose.yml
version: "3.7"
services:
allinone:
image: alpine:latest
volumes:
- ~/.aws:/tmp/aws:ro
command: ls -l /tmp/aws
如果要更改容器中此文件夹的内容,但又不想在实际主机上触摸它,则可以从那里将nico@lapap12:~/local/so$ docker-compose up
Creating so_allinone_1 ... done
Attaching to so_allinone_1
allinone_1 | total 0
allinone_1 | -rw-r--r-- 1 1000 1000 0 May 22 15:45 foo.bar
so_allinone_1 exited with code 0
的内容复制到/tmp/aws
。 / p>