【问题标题】:How to set different context for docker-compose and DockerFile [duplicate]如何为 docker-compose 和 DockerFile 设置不同的上下文 [重复]
【发布时间】:2021-09-20 20:06:34
【问题描述】:

我正在尝试做的事情:

我打算在我的服务仓库中创建一个构建文件夹,其中应该包含所有与 docker 相关的文件。

我的服务依赖于 postgres 和 rabbitmq,因此作为开发工作流程,我将启动服务依赖项,因为 docker 包含并通过连接到容器公开的端口来运行我的应用程序。

我的服务已经有在 deploy-scripts 文件夹下创建数据库、创建表和创建索引所需的 SQL 文件。 (请参考下附文件夹结构图)

我计划通过将 deploy-scripts 文件夹复制到 docker-entry 点脚本来启动一个包含所有表、数据库和角色的 docker 容器,如此链接 How to create User/Database in script for Docker Postgres 中所述

详情:

Docker 编写文件

version: '3.4'
services: 
  database:
    build:
      context: ./postgres
      dockerfile: DockerFile
    ports: 
      - 5432:5432
    volumes: 
      - database-data:/var/lib/postgresql/data
volumes: 
  database-data:

Postgres Docker 文件

FROM postgres:10.17-buster
COPY ../deploy-scripts /docker-entrypoint-initdb.d/

这是我的文件夹结构。

当我执行docker-compose -f build/docker-compose.dev.yml up 命令时,出现以下错误

Building database
[+] Building 0.2s (6/6) FINISHED
 => [internal] load build definition from DockerFile                                                                                                                                                       0.0s
 => => transferring dockerfile: 36B                                                                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/postgres:10.17-buster                                                                                                                                   0.0s
 => [internal] load build context                                                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => CACHED [1/2] FROM docker.io/library/postgres:10.17-buster                                                                                                                                              0.0s
 => ERROR [2/2] COPY ../deploy-scripts /docker-entrypoint-initdb.d/                                                                                                                                        0.0s
------
 > [2/2] COPY ../deploy-scripts /docker-entrypoint-initdb.d/:
------
failed to compute cache key: "/deploy-scripts" not found: not found
ERROR: Service 'database' failed to build: Build failed

有谁能帮帮我吗?如何将 deploy-scripts 文件夹复制到 postgres 中?

Docker Compose 必须使用构建文件夹上下文? Docker File 是否必须使用我的服务根文件夹上下文?

【问题讨论】:

  • 在构建期间您无法将文件从构建上下文中取出。 .. 不在构建上下文中。
  • 仅供参考:我已经找到了解决方案。但我无法将解决方案添加为答案,因为人们决定通过投票来结束这个问题 :)

标签: postgresql docker docker-compose


【解决方案1】:

我认为该错误与您的deploy-scripts 目录的位置有关。您尝试从父文件夹执行复制,但这是不可能的。

<src> 路径必须在构建的上下文中;你不能COPY ../something /something,因为docker build 的第一步是将上下文目录(和子目录)发送到 docker 守护进程。 src

它必须位于包含您的Dockerfile 的目录的子目录中。

【讨论】:

  • 它必须位于build: { context: } 目录的子目录中,因此您可以通过将上下文目录更改为父目录、将dockerfile: 位置和COPY 行更改为两者来解决此问题相对于该父目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2022-08-15
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多