rzl*_*vmp 5 dns docker docker-compose
我有两个容器:应用程序和MINIO服务
可以说docker-compose.yml是:
version: "3"
services:
s3:
image: minio/minio:RELEASE.2021-11-09T03-21-45Z
expose:
- "9000"
- "9001"
container_name: s3
command: server /data --console-address ":9001"
environment:
- MINIO_DOMAIN=s3
- MINIO_ROOT_USER=some_user
- MINIO_ROOT_PASSWORD=some_password
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- /tmp/data:/data
app:
image: my_image
container_name: app
build:
context: .
dockerfile: ./Dockerfile
depends_on:
- s3
Run Code Online (Sandbox Code Playgroud)
appMINIO通过http://s3:9000端点 URL连接到的容器
当我跑步时
aws --profile myprof --endpoint-url="http://s3:9000" s3 ls s3://bucketname/path/to/file
Run Code Online (Sandbox Code Playgroud)
一切正常。
app但是我使用虚拟主机样式路径需要一些第三方库:
http://bucketname.s3:9000/path/to/file
Run Code Online (Sandbox Code Playgroud)
当然也bucketname.s3无法解决。
我尝试在里面设置172.19.0.4 bucketname.s3(容器本地IP)/etc/hosts,一切正常。但我无法/etc/hosts每次都更新每个新存储桶。
那么这里有什么方法可以*.s3在docker中设置通配符主机名吗?
我的应用程序使用python:3.7.0-alpine图像
的结果cat /etc/resolv.conf 是
nameserver 127.0.0.11
options edns0 ndots:0
Run Code Online (Sandbox Code Playgroud)
所以看起来可以通过使用在本地主机解析器服务中设置域Dockerfile,这里有什么方法可以做到这一点吗?
我向s3容器添加了网络别名作为临时解决方案,以便能够docker-compose up -d及时添加准确的存储桶名称,但这不是解决方案,因为我仍然无法在不重新启动容器的情况下动态创建新存储桶:
version: "3"
services:
s3:
image: minio/minio:RELEASE.2021-11-09T03-21-45Z
expose:
- "9000"
- "9001"
container_name: s3
command: server /data --console-address ":9001"
environment:
- MINIO_DOMAIN=s3
- MINIO_ROOT_USER=some_user
- MINIO_ROOT_PASSWORD=some_password
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- /tmp/data:/data
networks:
default:
aliases:
- bucketone.s3
- buckettwo.s3
Run Code Online (Sandbox Code Playgroud)
我还尝试在外部分离的 DNS 服务器内设置记录:
*.s3 IN CNAME s3.
Run Code Online (Sandbox Code Playgroud)
但这种方法也行不通。看起来容器尝试s3.使用相同的 DNS 服务器来解析,而不是使用 Docker 内部 DNS 解析器(s3主机存在的地方)。所以看起来唯一可能的解决方案是设置与 Docker 集成的 DNS 服务器,可以管理容器内部动态 IP 和记录
(这可能不是最好的答案,但可能比没有好)。
我的主机系统上已经有一个自定义 DNS 服务器(在我的例子中是 Acrylic)。我所做的快速修复:
ping anotherservice.loc获取服务容器的IP,在我的例子中是172.18.0.7)172.18.0.7 *.anotherservice.loc并重新启动 DNSipconfig /flushdns此命令适用于 Windows)理论上:
docker-compose.yml,以避免需要编辑 DNS 设置,以防 Docker 将来更改它。或者,| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |