命名 Docker 卷以共享构建而不更新

2024-04-28

我工作的公司的开发人员要求我用 Docker 做一些不同的事情,然后我也被使用了。目标是拥有 2 个具有以下职责的容器:

容器A: 节点容器将构建前端 React 应用程序并将捆绑包放入名为的目录中app/dist/。完成后,容器将停止运行。

容器B: 一个 alpine nginx 容器,它将提供静态文件/usr/share/nginx/html/app.

容器 A 中构建的文件将使用将挂载的卷提供给容器 B<Container A>/app/dist to <Container B>/usr/share/nginx/html/app.

请注意,公共可访问端口和 nginx 容器之间有一个 HAProxy 层,该容器称为app.

上述任务正在使用 docker compose 文件进行编排,如下所示:

version: '2'
volumes:
  webapp_build_volume: {}
services:
  webapp_build:
    build:
      context: .
      dockerfile: 'config/nginx/dockerfile-builder'
    volumes:
      - webapp_build_volume:/app/dist
      - webapp_static_volume:/app/src/app/static
  app:
    build:
      context: 'config/haproxy'
      dockerfile: 'dockerfile-app-haproxy'
    links:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - '80:80'
      - '1936:1936'
  web:
    build:
      context: .
      dockerfile: 'config/nginx/dockerfile-web'
    environment:
      - EXCLUDE_PORTS=443
      - VIRTUAL_HOST=*
    depends_on:
      - webapp_build
    volumes:
       - webapp_build_volume:/usr/share/nginx/html/app

目前,这仅在第一次构建 docker compose 文件时有效。创建卷后,卷中的文件不再更新。我读到命名卷在建立后无法更新,但我无法确认这一点。我找到了涉及跑步的解决方法docker-compose rm --force && docker volume webapp_build rm但如果可能的话,我不想杀死缓存的容器,因为 CI 服务会变得太慢。

如果我可以澄清任何事情,请告诉我(我知道这里有很多活动部件)。请注意,我也在使用 docker 2 beta,尽管我不知道这会如何改变我在这里所做的任何事情。


这有点难以理解,但听起来您正在构建一个映像,将文件输出到您认为是一个卷的内容中,并尝试使用它来填充另一个正在运行的容器使用的命名卷。

您很可能感到困惑的是,构建容器不会安装卷,卷仅安装在正在运行的容器中。命名卷确实有一个功能,它将由图像的内容填充,但仅当您安装空的命名卷时。看来您在第一次构建+运行时利用了此功能,但它在以后的构建中将不再起作用。如果您在没有卷的情况下运行构建容器,您会发现您的文件按预期存在。

您可以轻松更新命名卷。我想到了两个选择。一种是使用您当前的进程,但将卷安装点更改为“/target”之类的内容并作为您的CMD将源内容复制到“/target”。那看起来像:

Dockerfile

...
RUN compile-cmd --output-to /local/build/dir

入口点.sh:

cp -a /local/build/dir/* /target/

docker-compose.yml:

version: '2'
services:
  webapp_build:
    build:
      context: .
      dockerfile: 'config/nginx/dockerfile-builder'
    volumes:
      - webapp_build_volume:/target
...

第二种选择是根本不在容器构建中执行此操作,而是使用应用程序编译先决条件创建一个容器。然后使用以下命令将应用程序代码作为卷安装到此容器中CMD or ENTRYPOINT它获取代码卷内容,对其进行编译,并将其输出到也已安装的命名卷。然后,您只需运行安装了两个卷的编译容器,而不是构建构建容器。

入口点.sh:

compile-cmd --input-src=/source --output-to /target

docker-compose.yml:

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

命名 Docker 卷以共享构建而不更新 的相关文章

  • 如何从 docker 容器运行 webpack 构建?

    我正在制作的应用程序是用 ES6 编写的 其他好东西是由 Docker 容器内的 webpack 转译的 目前 一切工作从创建内部目录 安装依赖项到创建编译的捆绑文件 当运行容器时 它说 dist bundle js 不存在 除非我在主机目
  • 在 docker-compose 构建之后,docker-compose up 运行旧的未更新的容器

    我使用 docker compose 并发现以下问题 当我更改代码并想要重建我使用的泊坞窗时 docker compose stop docker compose build 然后我想通过以下方式运行系统 docker compose up
  • Docker OSX:从容器连接到主机端口

    我的问题 我正在尝试在 docker 容器上安装 Flask 应用程序 该应用程序需要通过以下方式安装一些软件包pip https pip pypa io en stable 我在端口 9000 上使用本地 主机 而不是容器 pip 存储库
  • 使用 ecs-cli 在 AWS 上部署 docker 时遇到问题

    我在 ECS 上有一个存储库 已使用 ecs cli 创建了一个集群 ecs cli configure region us west 2 profile
  • 如何将新的 Kubernetes Minion 添加到当前集群

    我有一个运行在 3 台服务器上的 Kubernetes 集群 一台主服务器和 2 台服务器 我想添加另一个小黄人 是否可以添加 Minion 而无需再次进行完整安装 到目前为止 在寻找执行此操作的指南时 我只能找到有关建立整个集群的优秀指南
  • ECS 任务定义是否支持卷映射语法?

    docker compose 规范支持卷映射语法services 例如 version 2 volumes jenkins home external true services jenkins build context args DOC
  • Docker 构建器构建与 docker 构建

    在 Docker 的文档页面上 有一个条目码头工人建造者 https docs docker com engine reference commandline builder 这是父命令docker 构建器构建 https docs doc
  • 我可以在 Nginx Conf 中添加多少个服务器块

    知道我可以在 Nginx 配置中添加多少个服务器块吗 我需要将它用于具有多个子域的反向代理 每个客户端一个子域 它能成功支持 10 000 个服务器块吗 有没有相关的基准研究 这实际上并不是一个你有多少人的问题can但你有多少 能够妥善处理
  • 将当前目录复制到 docker 镜像

    构建 Docker 映像时 我需要将同一目录中的所有文件复制到 Docker 映像中 我尝试这样做 ADD HOME src RUN ls HOME src 但似乎不起作用 ls cannot access root src No such
  • Http POST 删除 URL 中的端口

    我有一个用 Django 构建的网络应用程序 我目前正在家里的路由器后面的笔记本电脑上运行它 我将路由器配置为将发送到特定端口的所有流量路由到该笔记本电脑 我将 Nginx 作为 Apache 的反向代理 使用 mod wsgi 来运行 D
  • nginx server_name 在流块内可能吗?

    目前设置如下 stream server listen 9987 udp server name subdomain EXAMPLE com this line is resulting in an error proxy pass loc
  • 无法使用 docker-compose 在 Dockerfile 中运行 rake db:create

    我有一个Dockerfile and docker compose yml就像在tutorial https docs docker com compose rails 除非我从现有的应用程序开始 My docker compose yml
  • Docker:PermissionError:[Errno 13]权限被拒绝[重复]

    这个问题在这里已经有答案了 我在运行 docker compose 时得到了这个 Got permission denied while trying to connect to the Docker daemon socket at un
  • 常规请求期间 Django AJAX 请求未通过

    我有一个带有登录网页的 Django 站点 当提交页面上的登录表单时 它会执行登录视图 该视图会在其中运行一个需要很长时间处理 30秒左右 的函数 因此 为了在登录期间向客户端显示进度 一旦提交表单 登录页面上的 JS 函数就会开始向服务器
  • Docker 容器在 systemd 启动后关闭

    由于某种原因 当使用 systemd 单元文件时 我的 docker 容器会启动 但会立即关闭 我尝试查找日志 但看不到任何有关发生这种情况的原因的指示 有没有人知道如何解决这个问题 找到显示正在发生的情况的日志 注意 当使用 docker
  • 如何在 Linux 主机上的 docker 容器中挂载目录 [重复]

    这个问题在这里已经有答案了 我想将一个目录从 docker 容器挂载到本地文件系统 该目录是网站根目录 我需要能够使用任何编辑器在本地计算机上编辑它 我知道我可以跑docker run v local path container path
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki
  • symfony docker 缓存文件的权限问题

    我有一个带有 docker compose 的 docker symfony 设置 它运行良好 除非我运行缓存 清除Web 服务器可以从控制台访问这些文件 我可以通过取消注释来规避权限问题掩码 0000 在控制台和 web app dev
  • 如何使用本地 nuget 包源进行 Dockerfile dotnet 恢复 [重复]

    这个问题在这里已经有答案了 我正在尝试使用本地 nuget 包进行 dotnet 恢复 我尝试按照本教程进行操作 无需互联网即可恢复 dotnet https blog bigfont ca dotnet restore without a
  • Docker-compose:npm 安装成功后卷中不存在 node_modules

    我有一个具有以下服务的应用程序 web 在端口 5000 上保存并运行 python 3 Flask Web 服务器 使用 sqlite3 worker 有一个index js文件是队列的工作人员 Web 服务器通过端口使用 json AP

随机推荐

  • 如何在 android 中使用 XML 形状创建向右箭头(V 形)? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 How to create a right facing arrow using xml shapes in android like
  • 如何使用 MvvmCross 创建 MasterDetailPage?

    我正在尝试使用 MvvmCross 开发 Xamarin Forms 应用程序 并且我想使用汉堡菜单 MasterDetailPage 但我不知道该怎么做 我尝试了不同的方法 搜索教程和示例 但没有成功 谁能帮我 正如你在这里看到的Mvvm
  • 使用 OpenFileDialog 选择文件和文件夹

    我做了很多研究来找到这个问题的合适答案 但我失败了 我可以在这里和其他论坛上看到多个问题 但没有明确的答案带来明确的解决方案 我希望 OpenFileDialog 为我选择一个 多个文件 并允许我也选择文件夹 例如 A 多个文件或多个文件夹
  • 在SSIS中导入已合并单元格的Excel

    我的问题是在读取合并 组合列单元格的 Excel 文件时 例如 将下面的excel数据读取到数据库中 Excel 输入 ID NAME DEPT FNAME LNAME 1 Akil Tiwari IT 2 Vinod Rathore IT
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • 尝试更改冻结标题:有 FB 开发人员吗?

    在过去的几年里 这个问题已经被问过几次了 但正如 Facebook 告诉我的那样 Facebook 工程师积极参与 StackOverflow 所以我希望在这里能得到一些快乐 我们已将视频上传到 YouTube 进行了转发并确保我们对此感到
  • 如何通过特定的行分隔符读取文本文件?

    使用流读取器读取文本文件 using StreamReader sr new StreamReader FileName Encoding Default string line sr ReadLine 我想强制行分隔符应该是 n not
  • WKWebView CALayer 到图像导出空白图像

    我试图截取网页的屏幕截图 但图像始终为空白 白色 我正在使用此代码进行转换CALayer to Data 取自这里 https stackoverflow com a 41387514 4859791 extension CALayer G
  • 如何显示图片目录中的图像?

    我想显示图片库中的图片 我获取图片并绑定数据 StorageFolder picturesFolder KnownFolders PicturesLibrary IReadOnlyList
  • _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?

    我正在开发一个 MFC Visual C 项目 据我了解MSDN http msdn microsoft com en us library d41t22sb 28v VS 100 29 aspx CrtDumpMemoryLeaks 应该
  • buildozer android NDK 未下载 Ubuntu

    我使用的是 Ubuntu 16 04 LTS 操作系统 我已经在 python2 和 python3 中安装了 buildozer android sdk 已安装 但 buildozer 在下载 android NDK 时显示错误 请帮我解
  • C# 中的嵌套正则表达式替换

    我不太擅长正则表达式 但我了解基础知识 我试图弄清楚如何根据匹配中的某个值进行条件替换 例如 假设我有一些嵌套的字符串结构 如下所示 id value id and value are space delimited id will nev
  • 当抛出堆栈溢出异常时在 Visual Studio 2010 中查看 CallStack

    我想在抛出 stackoverflow 异常时查看调用堆栈 即我想查明是什么递归调用导致了堆栈溢出 调用堆栈已清除 我只能看到 外部代码 编辑我遵循了 Chris Schmich 的建议 下面发布 现在我有一个如下所示的调用堆栈 这只是我正
  • GitPython 并向 Git 对象发送命令

    GitPython http gitorious org git python是一种从 python 与 git 交互的方式 我正在尝试访问基本的 git 命令 例如git commit m message 从此模块中 根据this htt
  • Symfony 4 和 Doctrine 2 从集合中删除(第一个)项目后序列化导致转换为 JSON 对象而不是数组

    我在序列化已删除第一个元素的集合时遇到很多麻烦 我有 CompaniesCollection 实体 与 Company 实体有 Many2Many 关系 ORM ManyToMany targetEntity App Entity Comp
  • 在 Xcode 4 中锁定文件

    我有一个简单的问题 在 Xcode 3 中 我可以通过单击每个文件顶部的小锁图标来锁定文件 我在 Xcode 4 中缺少这个功能 我想我只是盲目的 你能帮助我吗 该功能在 Xcode 4 中被 部分 终止 即使您可以从 文件 菜单解锁锁定的
  • WPF调整大小完成

    所以我需要按程序生成网格的背景图像 只需要 0 1 秒 因此 我可以连接到 SizeChanged 事件 但是当您调整图表大小时 它会每秒触发该事件 30 次 因此调整大小事件会明显滞后 有谁知道连接到调整大小事件并测试天气是否已完成调整大
  • (简单)boost thread_group 问题

    我正在尝试编写一个相当简单的线程应用程序 但我对 boost 的线程库很陌生 我正在开发的一个简单的测试程序是 include
  • 从 CIImage 获取 UIImage 无法正常工作

    我在从 CIImage 获取 UIImage 时遇到问题 下面的代码行在 iOS6 上运行良好 输出图像是 CIImage self imageView UIImage imageWithCIImage outputImage or sel
  • 命名 Docker 卷以共享构建而不更新

    我工作的公司的开发人员要求我用 Docker 做一些不同的事情 然后我也被使用了 目标是拥有 2 个具有以下职责的容器 容器A 节点容器将构建前端 React 应用程序并将捆绑包放入名为的目录中app dist 完成后 容器将停止运行 容器