当前位置: 首页 > 知识库问答 >
问题:

Docker-使用相对dockerfile编写外部生成上下文

韩烈
2023-03-14

我试图实现的是:我想在一个容器中缓存当前的users~/.aws目录,以便在构建另一个容器时使用它们。

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没有将AWS服务中的DockerFile路径视为与docker-compose.yml相关的路径,而是假设它与Context路径相关。是否可以让docker-compose从与docker-compose.yml相同的目录加载ctx.dockerfile并按照我的方式设置上下文?

  1. 任何解决方案都必须在Windows、OSX和Linux上运行
  2. 任何解决方案都必须只需要docker和/或docker-compose,我不能事先运行shell脚本

共有1个答案

华森
2023-03-14

我可以让docker-compose从与docker-compose.yml相同的目录加载ctx.dockerfile并按照我的方式设置上下文吗?

阿法克:不,没有。

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

也许您可以将/home/$user设置为构建上下文(或者更高的级别,这取决于Dockerfiles等所在的位置),但是您还必须创建一个.DockerIgnore文件,并且忽略上下文中的所有内容,除了.aws和当前文件夹之外...正如你所看到的,这将是一个混乱和不是很可复制的。

我建议在容器内的~/.aws文件夹中使用卷,而不是copy

示例:

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使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下 编写 Dockerfile 以 express 自动创建的目录为例,目录结构如下: 在项目目录下新建 Dockerfile 文件 FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此

  • 我有以下文件夹结构: 我有我的micro-hr文件夹,其中是我的主包,我有一个本地lib,它是rabbitmq 这是我的dockerfile: docker撰写: 这是我的包裹。我的主包后端/微hr上的json: 我不知道我错在哪里,基本上我在我的主包中使用npm链接链接到我的lib,并尝试在docker中创建文件夹,但无济于事。 docker构建错误: 步骤6/10:复制/rabbitmq/包。

  • 我正在尝试将一个dockerfile放入我的主启动项目的子目录中。有一个称为的依赖项项目。当dockerfile位于的根目录中时,所有文件都正常工作,但当它嵌套在的子目录中时,它将失败 这对我来说是有意义的,因为它嵌套在子目录中,所以我只是在COPY命令前面添加了一个“../”,但这会导致以下上下文异常: 好的,这也是有意义的,因为docker文档说明上下文从dockerfile所在的地方开始,但

  • 我想根据我在<代码>中构建的服务来组织我的docker图像文件。docker目录。首先,我想构建web docker容器。注意,在docker文件中,我是如何将webroot文件复制到docker容器的。问题是,在我的docker compose中。yml,当构建图像时,它引用来自目录,而不是实际的webroot。我尝试在docker文件中使用相对路径,但似乎不起作用。你知道我该怎么做吗? Doc

  • Often you may want to run external scripts that interact with your contracts. Truffle provides an easy way to do this, bootstrapping your contracts based on your desired network and connecting to your

  • 我想编写一个服务,同时保持项目的文件结构整洁。但是Docker似乎在构建上下文之外的路径上有问题。我正在创建一个包,并想将所有与Docker相关的东西保存在项目根目录下的文件夹中。但是我找不到从和引用项目文件的方法。创建容器时,必须复制项目中的文件。 这是我目前的项目结构: 现在,如果我和,我尝试了两种可能性。要么我的Dockerfile使用,要么撰写文件具有构建指令,例如: 第一种方法不起作用。