【发布时间】:2019-07-10 12:37:06
【问题描述】:
我的问题归结为:我在 docker compose 中有两个服务:app 和 storage。我正在寻找一种方法来从应用程序内部访问storage 服务(端口 9000) 使用相同的地址从外部访问。
app 是一个使用 django-storages 和 S3 后端的 Django 应用程序。
storage 是一个 minio 服务器(兼容 S3,仅用于开发)。
从app,我可以使用http://storage:9000 访问storage。从 docker 外部,我可以通过http://localhost:9000、http://0.0.0.0:9000,甚至http://192.168.xxx.yyy(使用网络上的不同设备)访问storage。没有惊喜。
但是,当生成 URL 时,我不知道它是用于内部还是外部(或两者)。
docker-compose.yml
services:
app:
build: backend/
ports:
- "8000:8000"
volumes:
- ./backend/src:/app/src
command: /usr/local/bin/python src/manage.py runserver 0.0.0.0:8000
storage:
image: minio/minio:RELEASE.2019-06-19T18-24-42Z
volumes:
- storage:/data
environment:
MINIO_ACCESS_KEY: "DevelopmentAccessKey"
MINIO_SECRET_KEY: "DevelopmentSecretKey"
ports:
- "9000:9000"
command: minio server /data
volumes:
storage:
我已经考虑根据上下文更改后端以产生端点 URL,但这远非微不足道(并且仅用于开发,生产使用外部 S3 存储,我希望它们尽可能相似) .
我玩过 docker-compose 网络配置,但我似乎无法完成这项工作。
关于如何在 docker-compose 中解决这个问题有什么想法吗?
其他信息:
我玩过host.docker.internal(和gateway.docker.internal)但无济于事。 host.docker.internal 解析为 192.168.65.2,我可以使用该 ip 从 app 访问 storage,但从浏览器 192.168.65.2:9000 会超时。
但似乎使用我的计算机外部 ip 有效。如果我使用192.168.3.177:9000,我可以从app、浏览器甚至外部设备访问storage(完美!)。但是,这个 ip 不是固定的,对我的同事来说显然也不一样,所以我似乎只需要一种在做docker-compose up时动态分配它的方法@
【问题讨论】:
标签: django docker docker-compose django-storage