如何从docker compose获取redis地址?
我试图将RedisURL传递给docker容器,但到目前为止,我无法让它工作。我做了一点调查,没有一个答案对我有用如何从docker compose获取redis地址?,docker,redis,docker-compose,Docker,Redis,Docker Compose,我试图将RedisURL传递给docker容器,但到目前为止,我无法让它工作。我做了一点调查,没有一个答案对我有用 version: '3.2' services: redis: image: 'bitnami/redis:latest' container_name: redis hostname: redis expose: - 6379 links: - api api: image: tufanmeric/a
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:
错误:Redis与Redis的连接失败-连接eNont Redis
您只能在同一Docker网络上的容器之间通信。Docker Compose为您创建了一个
默认
网络,并且在没有任何特定声明的情况下,您的redis
容器位于该网络上。但是您还声明了一个单独的代理
网络,并且只将api
容器附加到另一个网络
最简单的解决方案是删除所有网络:
块,只需使用默认值
网络Docker Compose即可。您可能需要将REDIS\u URL
变量格式化为实际URL,可能类似于redis://redis:6379
如果非技术性要求要有单独的网络,请将-default
添加到api
容器的网络列表中
您的docker compose.yml
中有许多其他设置不是特别有用<代码>公开:几乎什么都不做,通常也在Dockerfile中提供<代码>链接:是一种过时的跨容器调用方法,正如您声明的那样,它可以从Redis调用API服务器<代码>主机名:在容器本身之外没有效果,通常完全没有必要<代码>容器名称:确实有一些可见的效果,但通常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'
您是否尝试过使用
端口:-“6379:6379”
而不是公开
?重复到可能的重复感谢您的解释,我尝试将-默认
添加到网络中,但现在我无法访问api端点,我的docker在swarm模式下运行,我如何才能使它们协同工作?@TufanMeri&#231;如果在traefik服务上声明多个网络,则需要在标签中指定正确的网络名称,以便traefik可以访问它。对不起,我记不起标签的全名了。