docker - 更改卷内容后,容器无法读取 Docker 共享卷
问题描述
我有以下撰写文件,我将一些生成的 html 数据从 Jenkins 容器共享到主机驱动器,并通过 Nginx 容器从主机驱动器读取这些数据。我在 AWS 上使用 Ubuntu Server 18.04。
问题是我只能读取jenkins/workspace/allure-report
一次的内容。更新 html 数据后,Nginx 无法访问它并抛出 403 状态代码。
我尝试了所有可能的解决方案,但没有任何效果。唯一丑陋的解决方案是在每次 html 数据更新后重新启动 Nginx 容器。我不喜欢这种方式,并寻找一些内置的 docker 功能来解决这个问题。
什么没有帮助:在不使用 docker 主机驱动器的情况下直接在容器之间共享卷,使用rslave
选项,使用可以用作两个容器之间的缓冲区的 docker 单独卷......我相信它应该更容易!
version: '2'
services:
jenkins:
container_name: jenkins
image: "jenkins/jenkins"
ports:
- "8088:8080"
- "50000:50000"
env_file:
- variables.env
volumes:
- ./jenkins:/var/jenkins_home
selenoid:
container_name: selenoid
network_mode: bridge
image: "aerokube/selenoid"
# default directory for browsers.json is /etc/selenoid/
command: -listen :4444 -conf /etc/selenoid/browsers.json -video-output-dir /opt/selenoid/video/ -timeout 3m
ports:
- "4444:4444"
env_file:
- variables.env
volumes:
- $PWD:/etc/selenoid/ # assumed current dir contains browsers.json
- /var/run/docker.sock:/var/run/docker.sock
selenoid-ui:
container_name: selenoid-ui
network_mode: bridge
image: "aerokube/selenoid-ui"
links:
- selenoid
ports:
- "8080:8080"
env_file:
- variables.env
command: ["--selenoid-uri", "http://selenoid:4444"]
nginx:
container_name: nginx
image: "nginx"
ports:
- "80:80"
volumes:
- ./jenkins/workspace/allure-report:/usr/share/nginx/html:ro,rslave
解决方案
找到了解决方案:访问动态数据的最简单方法是在要查看的容器中使用volumes_from 。
当我像这样配置我的撰写文件时,我遇到了另一个问题 - 403 状态已经消失,但数据是静态的。但那是我的错,我没有正确使用“cp -r”命令,所以我的数据只复制了一次。
推荐阅读
- javascript - 以最少的重写代码使我的 HTML 代码响应移动设备的最佳方法是什么?
- python - 如果 ManyToManyField 中的对象如何注释查询集
- c# - Stripe API - 基于元数据的搜索
- apache-spark - 使用 Azure Identity 凭据进行 Spark 访问 Blob 存储
- paypal - PayPal REST API:沙盒模式下的“客户端身份验证失败”
- reactjs - 内部服务器错误 500 对 firebase 做出反应
- javascript - 如何 push() 东西到带有对象的数组中
- git - 如何通过 Jenkins 作业在 Docker 映像上运行的 Groovy 阶段传递 Git 令牌凭据
- c - 尝试使用 g++ 编译 .c 文件时链接器命令失败
- babeljs - api.targets 不是 plugin-proposal-object-rest-spread 中的函数