我是Docker的初学者,我写了一个简单的docker-compose.yml文件,用于运行两个服务容器,第一个容器用于节点应用程序,另一个用于redis问题,因为我的应用服务器无法与redis容器连接,这是我的代码:< / p>
version: '3'
services:
redis:
image: redis
ports:
- "6379:6379"
networks:
- test
app_server:
image: app_server
depends_on:
- redis
links:
- redis
ports:
- "4004:4004"
networks:
- test
networks:
test:
输出: 错误:Redis与127.0.0.1:6379的连接失败-连接ECONNREFUSED
答案 0 :(得分:2)
好像您的webapp
正在连接到127.0.0.1
/ localhost
而不是redis
。因此,这不是docker问题,而是Web应用程序中更多的编程问题。您可以在您的Web应用程序中添加环境变量(类似REDIS_HOST
),然后在compose文件中提供该参数。当然,这需要您的Web应用程序从环境变量读取redis
主机。
撰写中的示例环境变量分配:
webapp:
image: my_web_app
environment:
- REDIS_HOST=redis
再次,这要求您的Web应用程序实际上在其代码中使用REDIS_HOST
环境变量。
答案 1 :(得分:0)
127.0.0.1:6379
连接到current container localhost
而不是Redis容器
使用您的docker-composer文件。现在,您通过redis容器名称连接到redis。如果docker-compose自动创建docker桥接网络-允许您通过其名称调用另一个容器...
docker inspect
查看redis容器名称-例如当前的redis容器名称为redis_abc
,因此您可以通过redis_abc:6379
连接到redis,或者更简单,只需将container_name: redis_server
添加到docker-为某些容器名称编写文件。
https://docs.docker.com/network/bridge/