将多个 .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 的相关文章

随机推荐

  • 为什么我可以更改 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