docker - 使用带有 docker-compose 的 redis 时连接被拒绝
问题描述
所以这是我当前的 docker-compose.yml:
version: "2.0"
services:
redis:
image: redis
container_name: framework-redis
ports:
- "127.0.0.1:6379:6379"
web:
image: myContainer:v1
container_name: framework-web
depends_on:
- redis
volumes:
- /var/www/myApp:/app
environment:
LOG_STDOUT: /var/log/docker.access.log
LOG_STDERR: /var/log/docker.error.log
ports:
- "8100:80"
我尝试了不同的设置;例如:不使用redis的端口值,使用0.0.0.0,切换到expose选项。
如果我尝试从主机使用 127.0.0.1 进行连接,它可以工作,但它会失败,并显示我的应用程序容器的连接被拒绝消息。
有什么想法吗?
解决方案
如果您framework-redis
从访问framework-web
,那么您需要使用 ip(或容器名称,即framework-redis
)和端口来访问它framework-redis
。由于它将位于 docker 网桥后面,因此范围内的 ip172.17.0.0/16
将被分配给framework-redis
. 您可以使用该 IP,或者最好只提供容器名称和6379
端口。
$ cat docker-compose.yml
version: "2.0"
services:
redis:
image: redis
container_name: framework-redis
web:
image: redis
container_name: framework-web
depends_on:
- redis
command: [ "redis-cli", "-h", "framework-redis", "ping" ]
$
$ docker-compose up
Recreating framework-redis ... done
Recreating framework-web ... done
Attaching to framework-redis, framework-web
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # Redis version=5.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
framework-redis | 1:M 09 Dec 2019 19:25:52.799 * Running mode=standalone, port=6379.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # Server initialized
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 * DB loaded from disk: 0.000 seconds
framework-redis | 1:M 09 Dec 2019 19:25:52.800 * Ready to accept connections
framework-web | PONG
framework-web exited with code 0
正如你在上面看到的,我收到了一个PONG
命令PING
。
一些额外的点:
ports
都写成表格HOST_PORT:CONTAINER_PORT
。您不需要提供 IP(正如@coulburton 在评论中指出的那样)。如果您只是
framework-redis
从访问framework-web
,那么您不需要发布端口(即,6379:6379
在端口部分)。当我们想要172.17.0.0/16
从其他网络(例如,主机或其他物理机器)访问容器网络(据我所知默认情况下)中运行的应用程序时,我们只需要发布端口。
推荐阅读
- python - 如何从键值中获取并从该值中获取另一个值
- javascript - Ionic 5 Native File 插件未将文件写入 dataDirectory
- reactjs - 安装包并在摩纳哥编辑器上自动完成
- javascript - 如何在下一个身份验证中传递 redirect_uri?
- python - pytest:我如何模拟 pip 安装模块的不可用性?
- python - 在python(Pywhatkit)中发送whatsapp消息有时会失败
- powershell - 使用 Powershell 脚本从子文件夹中复制特定类型的文件
- android - Jetpack Compose 和 Room DB:自动保存用户输入的性能开销?
- android - Jetpack Compose 状态提升、预览和 ViewModels 最佳实践
- python - 在 Mac OS 上从 usr/bin 中删除 python