docker - 新容器访问现有容器上的卷
问题描述
我有一个“主”容器,在启动所有其他容器时应该已经在运行。
在其中我有一个conf/
目录,该服务正在监视和应用相关更改。
如何让每个新容器在此目录中放置一个文件?
真实场景:
鉴于我的docker-compose.yml
下面,我希望每个服务(portainer
, whoami
, )在服务的路径映射中apache
删除一个.yml
文件。"./traefik/conf/:/etc/traefik/conf/"
traefik
码头工人-compose.yml
version: "3.5"
services:
traefik:
image: traefik
env_file: ./traefik/env
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik/conf/:/etc/traefik/conf/
- ./traefik/traefik.yml:/etc/traefik/traefik.yml
portainer:
image: portainer/portainer
depends_on: [traefik]
command: --no-auth -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
whoami:
image: containous/whoami
depends_on: [traefik]
搬运工.traefik.yml
http:
routers:
portainer:
entryPoints: [http]
middlewares: [redirect-to-http]
service: portainer-preauth@docker
rule: Host(`portainer.docker.mydomain`)
whoami.traefik.yml
http:
routers:
whoami:
entryPoints: [http]
middlewares: [redirect-to-http]
service: whoami-preauth@docker
rule: Host(`whoami.docker.mydomain`)
portainer.traefik.yml 和 whoami.traefik.yml 文件在哪里?如果它们在主机上,您可以直接将它们复制到 ./traefik/conf/。– 沙申克五世
问题是我不能把所有文件都放在traefik/conf
.
这将需要在我每次创建新图像时手动将文件放在那里。
我相信每个服务都应该对自己的文件负责。
此外,当traefik
启动并找到尚未启动的其他服务的文件时,它会记录很多错误。
为避免这种行为,我想仅在容器启动时将文件放在那里。
下面是项目文件结构。
解决方案
您可以在所有服务中使用卷。只需在 docker-compose.yml 中定义它并将其分配给每个服务:
version: "3.5"
services:
traefik:
image: traefik
env_file: ./traefik/env
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik/conf/:/etc/traefik/conf/
- ./traefik/traefik.yml:/etc/traefik/traefik.yml
- foo:/path/to/share/
portainer:
image: portainer/portainer
depends_on: [traefik]
command: --no-auth -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- foo:/another/path/to/share/
whoami:
image: containous/whoami
depends_on: [traefik]
volumes:
- foo:/and/another/path/
volumes:
foo:
driver: local
这相当于“普通”Docker 的--volumes-from功能。或者至少,最接近它的东西。
然后,您的主容器将不得不使用相同的卷。如果这个容器不在同一个 Docker Compose 上下文中运行,你必须先在外部定义这个卷。
推荐阅读
- image - GIF 压缩 - Flutter
- grafana - 是否可以在 Expression Grafana Query 中获得一系列的总和?
- c# - C# 将带有 Case 语句的 SQL 查询转换为 LINQ
- javascript - 使用 nodemailer 向 gmail 发送邮件时出现问题
- mysql - 使用 CA 证书建立安全的 jdbc 连接
- java - Java String.format() 是否防止字符串注入?
- python - 从 Pyspark Column 获取值并将其与 Python 字典进行比较
- sql - SAS从一行计算多个新变量
- python - ModuleNotFoundError: No module named 'mxnet.contrib.amp' 导入 gluonnlp 时
- debugging - LLDB:用户定义别名后的制表符完成?