Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从docker compose获取redis地址?_Docker_Redis_Docker Compose - Fatal编程技术网

如何从docker compose获取redis地址?

如何从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

我试图将RedisURL传递给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:
错误: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可以访问它。对不起,我记不起标签的全名了。