我正在尝试使用docker-compose
容器化我的整个开发人员工作流程。我面临的问题是redis
容器。我的工作容器无法连接到Redis。我尝试了与stackoverflow不同的解决方案,例如:
Setting up node with redis using docker-compose
Access redis locally on docker - docker compose
nodejs, redis, npm and docker-compose setup
Docker-compose , anyway to specify a redis.conf file?
How to connect to a Redis container using Docker Compose?
还有许多其他来自github的人,尝试了不同的例子,但没有运气。
这是我的docker-compose文件:
version: "3.6"
services:
redis_db:
# image: bitnami/redis:latest # tried different image also
image: redis
container_name: rme_redis
network_mode: host # tried networks also
# command: ['redis-server', '/redis.conf']
# volumes:
# - ./docker/redis.conf:/redis.conf
# hostname: redis_db
# networks:
# - rme
# environment:
# - ALLOW_EMPTY_PASSWORD=yes
# - REDIS_PASSWORD="redis"
ports:
- 6379:6379
# networks:
# node_net:
# ipv4_address: 172.28.1.4
worker:
build: worker
image: worker
container_name: rme_worker
command: node worker.js
# networks:
# - rme
# network_mode: host
environment:
- REDIS_URL="redis://redis_db:6379" # localhost when netowk_mode is host
volumes:
- ./worker:/app
# links:
# - redis_db
depends_on:
- redis_db
我得到的错误是:
Error: Redis connection to "redis://redis_db:6379" failed - connect ENOENT "redis://redis_db:6379"
at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
errno: -2,
code: 'ENOENT',
syscall: 'connect',
address: '"redis://redis_db:6379"'
}
操作系统:macOS
Docker:Docker桌面
感谢您的帮助
设置network_mode: host
会禁用特定容器的Docker网络。仅在某些不常见的情况下,容器不侦听固定端口号,或者您试图使用容器来管理主机的网络设置,才需要这样做。
在您的情况下,由于Redis数据库正在禁用Docker网络,因此应用程序容器无法按名称访问它。删除所有network_mode: host
选项应解决此问题。
Networking in Compose描述了整个网络设置。值得注意的是,Compose将为您创建一个default
网络,并且可以使用其Compose服务名称访问容器。您通常不需要指定自定义networks:
选项,显式提供container_name:
,设置hostname:
,提供过时的links:
或设置network_mode:
。
您应该能够成功将显示的docker-compose.yml
文件修剪为:
version: "3.6"
services:
redis_db:
image: redis
# only needed to directly access Redis from host
ports:
- 6379:6379
worker:
build: worker
environment:
- REDIS_URL="redis://redis_db:6379"
# `docker-compose up worker` also starts Redis
# Not strictly needed for networking
depends_on:
- redis_db