gpt4 book ai didi

docker-compose 外部构建上下文与相对 dockerfile

转载 作者:行者123 更新时间:2023-12-02 18:28:04 26 4
gpt4 key购买 nike

我想要完成的是:我想缓存当前用户 ~/.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 加载 ctx.dockerfile来自与 docker-compose.yml 相同的目录并按照我的方式设置上下文?

我准备改变我解决问题的方法,但我有一些限制:
  • 任何解决方案都必须适用于 Windows、OSX 和 Linux
  • 任何解决方案都必须只需要 docker 和/或 docker-compose,我无法事先运行 shell 脚本
  • 最佳答案

    Is there anyway I can have docker-compose load the ctx.dockerfile from same directory as docker-compose.yml AND set the context the way that I am?



    AFAIK:不,没有。

    Dockerfile 在构建时与之交互的所有内容都必须在定义的上下文中。所以,你需要 .aws和当前文件夹所在的 docker-compose.yml等存在于相同的上下文中,即上下文需要是相关目录结构的最高级别,然后您必须定义所需文件的相对路径(Dockerfiles 和 .aws )。

    也许你可以设置 /home/$USER作为您的构建上下文(甚至更高级别,取决于您的 Dockerfile 等所在的位置),但是您还必须创建一个 .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 的内容。至 /root/.aws如果您想在容器中更改此文件夹的内容,但不想在实际主机上触摸它。

    关于docker-compose 外部构建上下文与相对 dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258665/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com