gpt4 book ai didi

docker - 如何使用docker-compose正确运行数据库(rethinkdb)?

转载 作者:行者123 更新时间:2023-12-02 18:44:38 25 4
gpt4 key购买 nike

我需要帮助来使用docker和nodejs运行数据库。我不明白我要去哪里错,但是我无法在带数据库的容器和带节点的容器之间建立连接。这是docker中的db链接:“https://hub.docker.com/_/rethinkdb/”。

我的Dockerfile

FROM node:latest
ENV HOME=/src/jv-agricultor
RUN mkdir -p $HOME/
WORKDIR $HOME/
ADD package* $HOME/
RUN npm install
EXPOSE 80
ADD . $HOME/
CMD ["node", "node_modules/.bin/nodemon", "-L", "bin/www"]

我的docker-compose.yml
version: "3"
volumes:
rethindb-data:
external: true
services:
db:
image: rethinkdb:latest
ports:
- "8080:8080"
- "29015:29015"
- "28015:28015"
api:
image: hello-nodemon
environment:
- NODE_ENV=development
- PORT=80
- DB_HOST=localhost
- DB_PORT=28015
deploy:
# replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "3000:80"
volumes:
- .:/src/jv-agricultor
- /src/jv-agricultor/node_modules
depends_on:
- db
networks:
- webnet
networks:
webnet:

我运行:docker stack deploy -c docker-compose.yml Web服务

我的 jetty 服务
ID                  NAME                MODE                REPLICAS            IMAGE                  PORTS
yez42a7w8khs webservice_api replicated 1/1 hello-nodemon:latest *:3000->80/tcp
n8idu78cp18m webservice_db replicated 1/1 rethinkdb:latest *:8080->8080/tcp,*:28015->28015/tcp,*:29015->29015/tcp

我的docker服务api(这里是节点/表达式)
ID                  NAME                IMAGE                  NODE                DESIRED STATE       CURRENT STATE            ERROR          PORTS
p20qdagcspjc webservice_api.1 hello-nodemon:latest abner Running Running 28 minutes ago

我的Docker服务数据库
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR       PORTS
3046xuo4l8ix webservice_db.1 rethinkdb:latest abner Running Running 30 minutes ago

我的日志内部数据库
webservice_db.1.3046xuo4l8ix@abner    | Recursively removing directory /data/rethinkdb_data/tmp
webservice_db.1.3046xuo4l8ix@abner | Initializing directory /data/rethinkdb_data
webservice_db.1.3046xuo4l8ix@abner | Running rethinkdb 2.3.6~0jessie (GCC 4.9.2)...
webservice_db.1.3046xuo4l8ix@abner | Running on Linux 4.15.0-24-generic x86_64
webservice_db.1.3046xuo4l8ix@abner | Loading data from directory /data/rethinkdb_data
webservice_db.1.3046xuo4l8ix@abner | Listening for intracluster connections on port 29015
webservice_db.1.3046xuo4l8ix@abner | Listening for client driver connections on port 28015
webservice_db.1.3046xuo4l8ix@abner | Listening for administrative HTTP connections on port 8080
webservice_db.1.3046xuo4l8ix@abner | Listening on cluster addresses: 127.0.0.1, 172.18.0.3, 10.0.5.182, 10.0.5.183, 10.255.11.212, 10.255.11.213
webservice_db.1.3046xuo4l8ix@abner | Listening on driver addresses: 127.0.0.1, 172.18.0.3, 10.0.5.182, 10.0.5.183, 10.255.11.212, 10.255.11.213
webservice_db.1.3046xuo4l8ix@abner | Listening on http addresses: 127.0.0.1, 172.18.0.3, 10.0.5.182, 10.0.5.183, 10.255.11.212, 10.255.11.213
webservice_db.1.3046xuo4l8ix@abner | Server ready, "069fd360acfb_jot" c1cf5173-cf0d-457f-9c8f-4ba1756c28d8

我的app.js
...
var connect = require('./lib/connect');
console.log('DB_HOST: ' + process.env.DB_HOST);
console.log('DB_PORT: ' + process.env.DB_PORT);
console.log('PORT: ' + process.env.PORT);
console.log('NODE_ENV: ' + process.env.NODE_ENV);
...

我的连接中间件
'use strict'

// import r from 'rethinkdb';
var r = require('rethinkdb');

module.exports._connect = (function _connect(req, res, next) {
r.connect( {host: process.env.DB_HOST, port: process.env.DB_PORT}, (err, conn) => {
console.log(err);
})
})();

我的服务docker api日志重新放置
webservice_api.1.p20qdagcspjc@abner    | [nodemon] restarting due to changes...
webservice_api.1.p20qdagcspjc@abner | [nodemon] starting `node bin/www`
webservice_api.1.p20qdagcspjc@abner | DB_HOST: localhost
webservice_api.1.p20qdagcspjc@abner | DB_PORT: 28015
webservice_api.1.p20qdagcspjc@abner | PORT: 80
webservice_api.1.p20qdagcspjc@abner | NODE_ENV: development
webservice_api.1.p20qdagcspjc@abner | { ReqlDriverError: Could not connect to localhost:28015.
webservice_api.1.p20qdagcspjc@abner | connect ECONNREFUSED 127.0.0.1:28015
webservice_api.1.p20qdagcspjc@abner | at ReqlDriverError.ReqlError [as constructor] (/src/jv-agricultor/node_modules/rethinkdb/errors.js:23:13)
webservice_api.1.p20qdagcspjc@abner | at new ReqlDriverError (/src/jv-agricultor/node_modules/rethinkdb/errors.js:68:50)
webservice_api.1.p20qdagcspjc@abner | at TcpConnection.<anonymous> (/src/jv-agricultor/node_modules/rethinkdb/net.js:94:27)
webservice_api.1.p20qdagcspjc@abner | at Object.onceWrapper (events.js:273:13)
webservice_api.1.p20qdagcspjc@abner | at TcpConnection.emit (events.js:182:13)
webservice_api.1.p20qdagcspjc@abner | at Socket.<anonymous> (/src/jv-agricultor/node_modules/rethinkdb/net.js:705:22)
webservice_api.1.p20qdagcspjc@abner | at Socket.emit (events.js:187:15)
webservice_api.1.p20qdagcspjc@abner | at emitErrorNT (internal/streams/destroy.js:82:8)
webservice_api.1.p20qdagcspjc@abner | at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
webservice_api.1.p20qdagcspjc@abner | at process._tickCallback (internal/process/next_tick.js:63:19)
webservice_api.1.p20qdagcspjc@abner | From previous event:
webservice_api.1.p20qdagcspjc@abner | at Function.<anonymous> (/src/jv-agricultor/node_modules/rethinkdb/net.js:945:10)
webservice_api.1.p20qdagcspjc@abner | at Function.connect (/src/jv-agricultor/node_modules/rethinkdb/util.js:43:16)
webservice_api.1.p20qdagcspjc@abner | at _connect (/src/jv-agricultor/lib/connect.js:9:7)
webservice_api.1.p20qdagcspjc@abner | at Object.<anonymous> (/src/jv-agricultor/lib/connect.js:19:3)
webservice_api.1.p20qdagcspjc@abner | at Module._compile (internal/modules/cjs/loader.js:689:30)
webservice_api.1.p20qdagcspjc@abner | at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
webservice_api.1.p20qdagcspjc@abner | at Module.load (internal/modules/cjs/loader.js:599:32)
webservice_api.1.p20qdagcspjc@abner | at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
webservice_api.1.p20qdagcspjc@abner | at Function.Module._load (internal/modules/cjs/loader.js:530:3)
webservice_api.1.p20qdagcspjc@abner | at Module.require (internal/modules/cjs/loader.js:637:17)
webservice_api.1.p20qdagcspjc@abner | at require (internal/modules/cjs/helpers.js:20:18)
webservice_api.1.p20qdagcspjc@abner | at Object.<anonymous> (/src/jv-agricultor/app.js:14:15)
webservice_api.1.p20qdagcspjc@abner | at Module._compile (internal/modules/cjs/loader.js:689:30)
webservice_api.1.p20qdagcspjc@abner | at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
webservice_api.1.p20qdagcspjc@abner | at Module.load (internal/modules/cjs/loader.js:599:32)
webservice_api.1.p20qdagcspjc@abner | at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
webservice_api.1.p20qdagcspjc@abner | at Function.Module._load (internal/modules/cjs/loader.js:530:3)
webservice_api.1.p20qdagcspjc@abner | at Module.require (internal/modules/cjs/loader.js:637:17)
webservice_api.1.p20qdagcspjc@abner | at require (internal/modules/cjs/helpers.js:20:18)
webservice_api.1.p20qdagcspjc@abner | name: 'ReqlDriverError',
webservice_api.1.p20qdagcspjc@abner | msg:
webservice_api.1.p20qdagcspjc@abner | 'Could not connect to localhost:28015.\nconnect ECONNREFUSED 127.0.0.1:28015',
webservice_api.1.p20qdagcspjc@abner | frames: undefined,
webservice_api.1.p20qdagcspjc@abner | message:
webservice_api.1.p20qdagcspjc@abner | 'Could not connect to localhost:28015.\nconnect ECONNREFUSED 127.0.0.1:28015' }

最佳答案

斯帕尼亚有观点,但可能没有正确答案。如果查看docker ps -a,则数据库容器的名称为webservice_db。因此,如果您尝试连接到本地主机上的rethinkdb(因为它显然不在本地主机上),您将不会成功。

您必须将容器名称(webservice_db)硬编码到您的配置文件中,或在docker-compose.yml中进行设置。但是,如果这样做,建议您显式设置容器名称:

version: "3"
...
services:
db:
container_name: webservice_db
...
api:
container_name: webservice_api
environment:
- NODE_ENV=development
- PORT=80
- DB_HOST= webservice_db
- DB_PORT=28015
...

在那里,现在应该可以正常工作了。

关于docker - 如何使用docker-compose正确运行数据库(rethinkdb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51364740/

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