docker - 如何在同一个 docker-compose 项目中优先考虑具有相同名称的容器?
问题描述
我有以下设置:
/project_a
docker-compose.yml
project_a/docker-compose.yml
:
version: "3.7"
services:
server:
...
networks:
- default
- web
db:
..
networks:
- default
容器连接了server
两个网络:default
为了与db
容器通信(不暴露在项目之外)和web
网络以与 Traefik 通信。
server
容器可以通过它的主机名访问容器db
:db
.
如果有人在同一台服务器上创建另一个项目:
completely_different_path/project_b/docker-compose.yml
:
version: "3.7"
services:
db:
..
networks:
- web
...然后我的来自project_aserver
的容器突然解析为来自project_b的另一个容器的 IP 地址,这破坏了功能。db
我发现这非常脆弱,因为通过添加配置错误的新项目很容易破坏现有项目。
有没有优雅的方法来防止它?我想避免container_name
对db
容器进行硬编码,因为我发现这是一种非常糟糕的做法:
- 容器名称不会以项目名称为前缀
- 通过创建容器的多个实例来扩展此设置是不可能的
- 如果有人复制带有
container_name
硬编码的 docker-compose.yml 文件,则会再次发生冲突
解决方案
推荐阅读
- node.js - 无法读取未定义猫鼬的属性“长度”
- environment-variables - JWT(jsonwebtoken) 标志不适用于环境变量
- python - 如何限制我的学生不访问 django 中的教师区域?
- r - R Highcharter 热图 x 轴类别
- python - 如何修复“TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是 'NoneType'”
- laravel - 存储具有对外关系的新实体
- c - 请解释这段 C 代码的输出
- android - 如何强制 SQLite 数据库从磁盘重新加载
- python - 如何用正则表达式同时搜索两个可能的引号?
- javascript - 如何停止动画Javascript?