gpt4 book ai didi

docker - 在docker上本地访问redis——docker compose

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

我有两个容器,redis 和 web。我正在尝试从网络访问 redis 容器。什么都不管用。下面是我的 docker compose 文件

version: '3.7'
services:
redis:
image: redis:alpine
restart: always
ports:
- "6379"
volumes:
- /private/var/www/redis:/var/www/redis
network_mode: host
web:
build:
context: web
dockerfile: Dockerfile
depends_on:
- redis
ports:
- "127.0.0.1:80:80"
- "127.0.0.1:443:443"
- "127.0.0.1:22:22"
volumes:
- /private/var/www/:/var/www/
networks:
- docker_web_network

networks:
docker_web_network:
driver: bridge
ipam:
driver: default
config:
- subnet: 162.18.1.0/16

当我在 Web 容器中运行 redis-cli 时,我得到 Could not connect to Redis at 127.0.0.1:6379: Connection refused

docker 容器

Vs-MacBook-Pro:docker vn$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36ca1b626a68 docker_web "/bin/sh -c '/usr/sb…" 2 hours ago Up 2 hours 127.0.0.1:22->22/tcp, 127.0.0.1:80->80/tcp, 127.0.0.1:443->443/tcp docker_web_1
d6191f39385a redis:alpine "docker-entrypoint.s…" 2 hours ago Up 2 hours docker_redis_1

redis 客户端

root@36ca1b626a68:/var/www# redis-cli -h docker_redis_1 ping
Could not connect to Redis at docker_redis_1:6379: Name or service not known

最佳答案

在 docker 容器中使用 localhost 是无效的,因为 localhost 意味着容器有他自己的容器,所以如果你从 web 容器中运行 redis-cli,redis-cli 会尝试在 web 容器而不是 redis 容器中找到 redis。

您需要指定 redis 服务名称 - docker(更具体地说是 docker-compose 的网络)将为您将服务名称解析为 redis 的容器 IP,因此您应该使用:

redis-cli -h redis ping

预期的输出是:

PONG

编辑:

这个答案只有在两种服务使用相同的网络模式时才有效,所以有两种方法:

  1. 将 network_mode:host 添加到 web 服务,然后为 redis 添加“localhost”就可以了
  2. 从 redis 中删除 network_mode:host,然后“redis”域就可以了

关于docker - 在docker上本地访问redis——docker compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246220/

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