gpt4 book ai didi

docker - 如何从docker compose获取redis地址?

转载 作者:可可西里 更新时间:2023-11-01 11:12:25 25 4
gpt4 key购买 nike

我正在尝试将 redis url 传递给 docker 容器,但到目前为止我无法让它工作。我做了一些研究,但没有一个答案对我有用。

version: '3.2'
services:
redis:
image: 'bitnami/redis:latest'
container_name: redis
hostname: redis
expose:
- 6379
links:
- api
api:
image: tufanmeric/api:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- proxy
environment:
- REDIS_URL=redis
depends_on:
- redis
deploy:
mode: global
labels:
- 'traefik.port=3002'
- 'traefik.frontend.rule=PathPrefix:/'
- 'traefik.frontend.rule=Host:api.example.com'
- 'traefik.docker.network=proxy'

networks:
proxy:

Error: Redis connection to redis failed - connect ENOENT redis

最佳答案

您只能在同一 Docker 网络上的容器之间进行通信。 Docker Compose 为您创建了一个 default 网络,并且您的 redis 容器在该网络上没有任何特定声明。但是您还声明了一个单独的 proxy 网络,并且只将 api 容器附加到另一个网络。

对此最简单的解决方案是删除所有 network: block ,只使用 Docker Compose 为您创建的 default 网络。您可能需要将 REDIS_URL 变量格式化为实际 URL,例如 redis://redis:6379

如果您有独立网络的非技术要求,请将 - default 添加到 api 容器的网络列表中。

您的 docker-compose.yml 中还有许多其他设置不是特别有用。 expose: 几乎什么都不做,通常也在 Dockerfile 中提供。 链接: 是一种过时的跨容器调用方式,正如您声明的那样,它可以 Redis 调用您的 API 服务器. hostname: 在容器本身之外没有任何作用,通常完全没有必要。 container_name: 确实有一些可见的效果,但通常 Docker Compose 选择的容器名称就可以了。

这会给你留下:

version: '3.2'
services:
redis:
image: 'bitnami/redis:latest'
api:
image: tufanmeric/api:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- REDIS_URL=redis://redis:6379
depends_on:
- redis
deploy:
mode: global
labels:
- 'traefik.port=3002'
- 'traefik.frontend.rule=PathPrefix:/'
- 'traefik.frontend.rule=Host:api.example.com'
- 'traefik.docker.network=default'

关于docker - 如何从docker compose获取redis地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55431950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com