将多个 .yml 文件传递​​给 docker-compose

2023-11-21

这里是 Docker 菜鸟。 我的 docker 文件夹中有两个文件 docker-compose.build.yml 和 docker-compose.up.yml 。以下是两个文件的内容..

docker-compose.build.yml

version: "3"
services:

    base:
        build:
          context: ../
          dockerfile: ./docker/Dockerfile.base
          args:
            DEBUG: "true"
        image: ottertune-base
        labels:
          NAME: "ottertune-base"

    web:
        build:
          context: ../
          dockerfile: ./docker/Dockerfile.web
        image: ottertune-web
        depends_on:
          - base
        labels:
          NAME: "ottertune-web"
        volumes:
          - ../server:/app

    driver:
        build:
          context: ../
          dockerfile: ./docker/Dockerfile.driver
        image: ottertune-driver
        depends_on:
          - base
        labels:
          NAME: "ottertune-driver"

docker-compose.up.yml

version: "3"
services:

    web:
        image: ottertune-web
        container_name: web
        expose:
          - "8000"
        ports:
          - "8000:8000"
        links:
          - backend
          - rabbitmq
        depends_on:
          - backend
          - rabbitmq
        environment:
          DEBUG: 'true'
          ADMIN_PASSWORD: 'changeme'
          BACKEND: 'postgresql'
          DB_NAME: 'ottertune'
          DB_USER: 'postgres'
          DB_PASSWORD: 'ottertune'
          DB_HOST: 'backend'
          DB_PORT: '5432'
          DB_OPTS: '{}'
          MAX_DB_CONN_ATTEMPTS: 30
          RABBITMQ_HOST: 'rabbitmq'
        working_dir: /app/website
        entrypoint: ./start.sh
        labels:
          NAME: "ottertune-web"
        networks:
          - ottertune-net


    driver:
        image: ottertune-driver
        container_name: driver
        depends_on:
          - web
        environment:
          DEBUG: 'true'
        working_dir: /app/driver
        labels:
          NAME: "ottertune-driver"
        networks:
          - ottertune-net

    rabbitmq:
        image: "rabbitmq:3-management"
        container_name: rabbitmq
        restart: always
        hostname: "rabbitmq"
        environment:
           RABBITMQ_DEFAULT_USER: "guest"
           RABBITMQ_DEFAULT_PASS: "guest"
           RABBITMQ_DEFAULT_VHOST: "/"
        expose:
           - "15672"
           - "5672"
        ports:
           - "15673:15672"
           - "5673:5672"
        labels:
           NAME: "rabbitmq"
        networks:
          - ottertune-net

    backend:
        container_name: backend
        restart: always
        image: postgres:9.6
        environment:
          POSTGRES_USER: 'postgres'
          POSTGRES_PASSWORD: 'ottertune'
          POSTGRES_DB: 'ottertune'
        expose:
          - "5432"
        ports:
          - "5432:5432"
        labels:
          NAME: "ottertune-backend"
        networks:
          - ottertune-net

networks:
   ottertune-net:
      driver: bridge

dockerfiles 没有任何问题,我只是对这种方法有一些疑问。

  1. 拥有多个文件而不是只有一个 docker-compose.yml 有何用途?
  2. docker-compose 与多个文件一起使用时如何工作?
  3. 当我做docker-compose -f docker-compose.build.yml build --no-cache
Building base
Step 1/1 : FROM ubuntu:18.04
---> 775349758637
[Warning] One or more build-args [DEBUG] were not consumed
Successfully built 775349758637
Successfully tagged ottertune-base:latest
Building web
Step 1/1 : FROM ottertune-base
---> 775349758637
Successfully built 775349758637
Successfully tagged ottertune-web:latest 
Building driver
Step 1/1 : FROM ottertune-base
---> 775349758637
Successfully built 775349758637
Successfully tagged ottertune-driver:latest 

进而docker-compose up我得到错误

rabbitmq is up-to-date                                                                                                                                                                       
backend is up-to-date                                                                                                                                                                        Starting web ... error                                                                                                                                                                                                                                                                                                                                                                    
ERROR: for web  Cannot start service web: OCI runtime create failed: container_linux.go:346: 
starting container process caused "exec: \"./start.sh\": stat ./start.sh: no such file or 
directory": unknown                                                                                                                                                                                                                                                                                                                                                                             
ERROR: for web  Cannot start service web: OCI runtime create failed: container_linux.go:346: 
starting container process caused "exec: \"./start.sh\": stat ./start.sh: no such file or 
directory": unknown                                                                                                                                                                                
ERROR: Encountered errors while bringing up the project.

此入口点 start.sh 是在 docker-compose.up.yml 文件中定义的,我没有将其作为参数传递给

docker-compose build

那么,为什么是docker-compose up尝试从构建期间甚至未传递的 yml 文件运行此入口点?对此真的很困惑,在谷歌和 stackoverflow 上没有找到太多相关信息。


If you docker-compose -f a.yml -f b.yml ..., Docker Compose 合并两个 YAML 文件。如果您查看您发布的两个文件,其中一个具有所有运行时设置(ports:, environment:,...),如果您碰巧已经有了图像,则足以运行该应用程序。第二only具有构建时设置(build:),但需要在本地检出源代码树才能运行。

您可能需要在每个docker-compose调用

docker-compose -f docker-compose.build.yml -f docker-compose.up.yml up --build

这些文件的作者似乎确实打算让它们单独运行

docker-compose -f docker-compose.build.yml build
docker-compose -f docker-compose.up.yml up

但请注意构建文件中的一些运行时选项,例如volumes:隐藏内置于图像中的应用程序,永远不会生效。

(您应该能够删除“up”YAML 文件中的大量设置,这些设置要么与映像中的内容重复,要么由 Docker Compose 为您提供:container_name:, expose:, links:, working_dir:, entrypoint:, networks:,并且(可能)labels:都是不必要的,可以删除。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个 .yml 文件传递​​给 docker-compose 的相关文章

  • Azure DevOps Pipeline - 构建 Docker 映像并将其推送到具有受限网络访问权限的 Azure 容器注册表

    我在 Azure DevOps 中有一个管道 应该构建 Docker 映像并将其推送到 Azure 容器注册表 因此 我有一个服务连接 类型 docker 注册表 以便授权管道推送 如果我删除容器注册表中的网络限制 一切都会正常 一旦我想限
  • 如何使用 iptables 阻止 docker 容器端口?

    我使用 docker 服务来设置容器网络 我只是为目标 IP 打开端口 7035 并将其暴露给主机 当我使用 iptables nvL 检查 iptables 时 我看到了FORWARD链 Chain FORWARD policy ACCE
  • Docker镜像删除后占用空间

    我提交了一个现有的 Docker 容器来创建新镜像 但提交的镜像太大了 原始镜像为 3 GB 并且在容器中安装了一些其他内容 提交的镜像为 8 GB 我的空间不足 所以我决定删除提交的映像 但即使删除提交的映像后 我的磁盘空间也没有增加 然
  • 将 Docker 与 AWS Elastic Beanstalk 结合使用有哪些优势?

    我在AWS Elastic Beanstalk上部署了几个网站 然后我听说了Docker 所以我想这次我可以尝试一下小型企业电子商务网站 Lumen Angularjs 网上查遍了 由于没有使用Docker的经验 还是很难 深入了解在 AW
  • 如何通过名称而不是IP地址访问docker容器?

    有没有办法可以使用名称而不是 IP 地址访问我的 docker 容器 我听说过 Pipework 也见过一些 docker 的 dns 和主机名类型选项 但我仍然无法将所有内容拼凑在一起 感谢您的时间 我不确定这是否有帮助 但这就是我到目前
  • 如何在minikube中创建多个集群

    我需要在 minikube 中创建额外的集群 我搜索了一段时间没有找到任何这方面的资源 如何在 minikube 中创建集群 创建第一个名为cluster 1 minikube start p cluster 1 创建第二个集群 名称为cl
  • 在 Traefik 1.5.0-rc5 中使用新的 httpChallenge 时出现问题

    在尝试升级到最新的 traefik 版本以便能够从 LetsEncrypt 生成 TLS 证书时 我遇到了证书生成时间的问题 这之前工作过traefik 1 4使用acme ondemand标志和其他设置 减去httpChallenge当然
  • Windows 8.1可以安装Docker吗?

    我想使用 Docker 将带有 NET Core 3 1 的 Web 应用程序部署到 Heroku 我下载了它 然后告诉我应该使用 Windows 10 适用于 Windows 的 Docker 需要 Windows 10 如果您使用 Wi
  • Docker pull:不允许操作

    我在拉取一些 docker 映像 但不是全部 时收到此错误 failed to register layer Error processing tar file exit status 1 operation not permitted 例
  • 如何对 Xcode 进行 docker 化

    出于 CI 的目的 我需要建立一个能够构建 iOS 应用程序的构建从属集群 目前 我依赖于一台 MacMini 目标是在将来部署更多台 并且我想在其上虚拟化多个从属设备 其中一些虚拟从站将构建 iOS 应用程序 其他虚拟从站将是用于各种目的
  • Spring boot JDBC无法连接docker容器中的mysql

    我正在尝试在两个单独的 docker 容器中运行 spring boot 应用程序 作为简单的 REST api 和 mysql 服务器 但是 我无法在 Spring 应用程序中获取 jdbc 连接来连接 mysql 它们都是独立工作的 当
  • 写入 cgroup 参数 cpu.rt_runtime_us 时出错

    我正在尝试修改 cgroup 中 docker 容器进程的实时运行时参数 我正在关注这个教程 http www breakage org 2014 08 22 using sched fifo in docker containers on
  • Docker - 如何在 postgres 容器中运行 psql 命令?

    我想在 postgres 映像中使用 psql 以便对数据库运行一些查询 但不幸的是 当我附加到 postgres 容器时 我收到错误 psql 命令未找到 对我来说 如何在容器中运行 postgresql 查询或命令是一个谜 如何在pos
  • 无法在 Vagrant 上运行的 CentOS 7 上安装 Docker

    使用 Vagrant 文件的全新实例 VAGRANTFILE API VERSION 2 Vagrant configure VAGRANTFILE API VERSION do config config vm box chef cent
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • docker run -e 的环境变量

    这是我的 Dockerfile FROM ubuntu 16 04 RUN apt get update RUN apt get install y default jdk ADD sample docker 1 0 SNAPSHOT ja
  • 在 Docker 容器中看不到 Django

    我想在一个简单的 Docker 容器中运行 Django 首先 我使用 Docker 文件构建了容器 里面没有什么特别的 只有 FROM RUN 和 COPY 命令 然后我用命令运行我的容器 docker run tid p 8000 80
  • 自动备份远程托管服务器的最佳实践

    我正在尝试设置一个用于团队笔记的服务器 我想知道自动备份其数据 又称我的笔记 的最佳方法是什么 目前我计划在 docker 镜像中运行服务器 docker 镜像将由托管服务 例如 Google 托管 我找到了一个适合我的需求的免费托管服务
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • Docker Compose 无法连接到数据库

    我使用 Nestjs 作为后端 并使用 typeorm 作为 ORM 我尝试在 docker compose 文件中定义我的数据库和应用程序 如果我将数据库作为容器运行 并从本地计算机运行应用程序 那么它运行良好 我的程序连接并创建表等 但

随机推荐

  • 为什么我可以更改 JavaScript 中的常量对象?

    我知道 ES6 还没有标准化 但是目前很多浏览器都支持 constJS 中的关键字 规范中写道 常量的值不能通过重新赋值而改变 并且 不能重新声明常量 正因为如此 虽然是 可以声明一个常量而不初始化它 它是 这样做是没有用的 当我做这样的事
  • HttpWebrequest 中 HTTP 标头的严格排序

    尽管 RFC 声明唯一命名标头的顺序并不重要 但我发送此请求的网站确实对标头的顺序进行了检查 这有效 GET https www thewebsite com HTTP 1 1 Host www thewebsite com Connect
  • ReCaptcha API v2 样式

    我在寻找如何设计 Google 新的验证码 v2 样式方面并没有取得多大成功 最终的目标是使其具有响应能力 但我很难将样式应用于即使是简单的东西 例如宽度 Their API文档除了以下内容之外 似乎没有给出任何关于如何控制样式的细节the
  • 搜索值中包含的 ElasticSearch 字段

    我正在尝试在 ElasticSearch 中运行类似的字段查询 select from products where milk like name 这意味着我正在尝试查找本例中产品名称是 milk 子字符串的所有文档 我该怎么做 我会使用自
  • 在什么情况下如何使用“队列”或“延迟”?他们的设计目的是什么?

    我很困惑 动画的 队列 和 ajax 的延迟吗 有人可以告诉我一些典型的例子吗 你基本上是正确的 延迟对象 可用于处理异步事件 您启动一个操作 然后注册一个回调 该回调将在操作完成时调用 这包括 AJAX 尽管还有很多其他用途 jQuery
  • TypeError:在严格模式 dexie.js 上可能无法访问“调用者”、“被调用者”和“参数”属性

    谁能告诉我当我调用 dexie js 的 count 函数时会发生什么 TypeError caller callee and arguments properties may not be accessed on strict mode
  • 如何在编辑 SASS 文件后在 Chrome 中自动重新加载 css

    我正在尝试在 Chrome canary 中设置映射功能 我按照截图这个答案 主要功能有效 当我检查一个元素时 它会将我指向本地 sass 文件 当我编辑它时 本地文件安全 并且触发 sass watch 但是 即使在开发工具的 常规 选项
  • Flutter 中的控制台消息

    我目前在 Flutter 版本 2 6 0 12 0 pre 406 的主频道中 每次运行应用程序时 我都会在控制台中收到这些奇怪的消息 我只想知道为什么以及它们的含义以及是否可以忽略这些 当我新创建一个应用程序并在不编辑任何内容的情况下运
  • 浏览器对 Angular 材质的支持

    我想在我的下一个项目中使用 Angular Material https material angularjs org 我没有找到任何有关它支持哪些浏览器的文档 有人知道它的内部运作方式以及预期结果吗 据我了解flexcss 属性 例如 I
  • 如何通过迁移手动创建 asp.net 身份表?

    我希望 asp net Identity 表存在于我的数据库中 并且在实际运行 mvc 应用程序并创建用户之前生成相应的代码优先模型 以便我可以针对这些类编写一些逻辑之前 有没有办法可以手动创建这些表 类并进行迁移 如果您想将其手动添加到数
  • Objective c ios中的^是什么意思? [复制]

    这个问题在这里已经有答案了 很抱歉问这么简单的问题 但这些东西很难用谷歌搜索 我在 iOS 中有代码连接到在摄氏温度和华氏温度之间切换的切换开关 但我不知道 1 是什么意思 self celsius 是布尔值 Thanks self cel
  • cgi.FieldStorage如何存储文件?

    所以我一直在尝试原始 WSGI cgi FieldStorage 和文件上传 我只是不明白它如何处理文件上传 起初 它似乎只是将整个文件存储在内存中 我想嗯 这应该很容易测试 大文件应该会堵塞内存 但事实并非如此 不过 当我请求文件时 它是
  • 如何配置 WebStorm 为 KoaJS 提供代码补全?

    目前 WebStorm 报告 KoaJS 的方法未定义 这是一个轻微但持续的烦恼 我在网上搜索过 也搜索过WebStorm的配置对话框 但没有结果 有人将 WebStorm 与 KoaJS 一起使用并且智能感知 代码完成正常工作吗 这是一个
  • 我们如何使用 TriggerDagRunOperator 触发多个气流 dag?

    我有一个场景 其中特定的 dag 完成后需要触发多个 dag 已使用 TriggerDagRunOperator 触发单个 dag 是否可以将多个 dag 传递给 TriggerDagRunOperator 来触发多个 dags 是否可以仅
  • C++ 可变参数模板 AND 和 OR

    可以使用C 11可变参数模板来完成吗 in template
  • 修改jar文件

    我有一个 jar 文件 在 html 文件中用作小程序 我想修改 jar 文件的内容并重建 jar 文件 以便 html 可以与新的 jar 文件一起正常工作 我怎样才能做到这一点 我已经尝试使用 7zip 解压缩 并修改了源代码并创建了新
  • 如何在postgis中创建一个以米为单位的圆?

    我想问一下如何创建一个圆radius 4km 我已经尝试过ST Buffer功能 但它创造了一个更大的圆圈 我通过将其多边形插入新的 kml 文件来查看创建的圆 这就是我正在尝试的 INSERT INTO camera geom circl
  • 为什么我要删除 build/ 目录?

    Flutter Dart Android 新手 在控制台中刚刚做了 C Users lordnull gt flutter help clean Delete the build directory 只是想知道为什么我们要删除项目的构建目录
  • “传递结果失败” - onActivityForResult

    我有一个LoginActivity 用户登录 基本上都是自己的Activity它的主题就像一个对话框 看起来像一个对话框 它出现在一个SherlockFragmentActivity 我想要的是 如果有成功登录 应该有两个FragmentT
  • 将多个 .yml 文件传递​​给 docker-compose

    这里是 Docker 菜鸟 我的 docker 文件夹中有两个文件 docker compose build yml 和 docker compose up yml 以下是两个文件的内容 docker compose build yml v