【发布时间】:2019-12-10 17:15:01
【问题描述】:
- 我正在使用 docker-compose 部署一个 nodejs 应用程序。但是由于某种原因,即使我使用了depends_on,应用程序容器也无法连接到redis容器,并且在容器应用程序上,我仍然可以ping redis docker。但是 pm2 日志仍然显示无法连接。
- 然后当我分离连接 redis 代码并单独运行它时,它仍然可以正常运行。我认为它可能与其他模块发生冲突,所以我发布了我的 package.json 列表。
我的应用代码:
var redis = require('redis');
var client = redis.createClient();
const subscriber = redis.createClient();
var sessionMiddleware = session({
secret: 'abc',
store: new redisStore({ host: "redis-docker" ,url: "redis-docker", port:
"6379", client: client }),
resave: false,
saveUninitialized: true,
cookie: { maxAge: 604800000 }
});
docker-compose 文件:
docker-compose.yml
version: '3.7'
services:
redis-docker:
container_name: redis
image: redis
networks:
- abc
volumes:
- redis-data:/data:rw
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "6379:6379"
hostname: redis-docker
# command: ["redis-server", "--appendonly", "yes"]
app:
container_name: app
image: app
restart: always
ports:
- "4004:4004"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
env_file:
- .env
build: .
depends_on:
- redis-docker
# command: ["npm", "start"]
networks:
- abc
links:
- redis-docker
volumes:
redis-data:
networks:
abc:
这是我用过的所有模块:
node
{
"name": "webphone-ui",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo 'OK'"
},
"author": "",
"license": "ISC",
"dependencies": {
"abortcontroller-polyfill": "^1.1.8",
"axios": "^0.16.2",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-polyfill": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"babel-register": "^6.26.0",
"bluebird": "^3.5.2",
"body-parser": "^1.18.2",
"connect-multiparty": "^2.1.0",
"connect-redis": "^3.3.2",
"cors": "^2.8.4",
"cron": "^1.6.0",
"dotenv": "^6.0.0",
"dotenv-webpack": "^1.5.7",
"express": "^4.16.2",
"express-ip": "^1.0.3",
"express-session": "^1.15.6",
"firebase-admin": "^5.10.0",
"form-data": "^2.3.1",
"jsonwebtoken": "^8.2.0",
"mime": "^1.6.0",
"morgan": "^1.9.0",
"node-schedule": "^1.3.1",
"nodemailer": "^4.4.1",
"react": "^15.6.2",
"react-audio-player": "^0.6.4",
"react-bootstrap-table": "^4.3.1",
"react-dom": "^15.6.2",
"react-helmet": "^5.2.0",
"react-multilingual": "^1.5.0",
"react-redux": "^5.0.6",
"react-router": "3.0.5",
"react-scroll": "^1.7.3",
"redis": "^2.8.0",
"redux": "^3.7.2",
"redux-thunk": "^2.2.0",
"rotating-file-stream": "^1.3.4",
"socket.io": "^2.2.0",
"sweetalert": "^2.0.8",
"uuid": "^3.1.0",
"webpack": "^3.10.0",
"webpack-dev-middleware": "^1.12.2",
"webpack-hot-middleware": "^2.21.0",
"winston": "^2.4.0"
},
"devDependencies": {}
}
请帮助我,如果有人以前解决过这个问题。我搜索并尝试了很多方法,但没有希望。 谢谢。
【问题讨论】:
-
你已经定义了它们之间的网络,我建议从
compose中删除links -
我确实尝试过使用和不使用链接,但仍然遇到同样的错误。谢谢。
-
是的,这并不能解决问题,我只是想让您知道使用网络时不需要使用链接:)
-
好的,谢谢。我明白了。
-
您得到的实际错误是什么?拥有两次主机名似乎有点奇怪,而且您指定的
url:不是 URL 语法。port:几乎可能需要是一个数字而不是一个字符串(对于默认的 Redis 端口,您可能会忽略它)。
标签: node.js docker redis docker-compose