【发布时间】:2020-12-17 12:00:49
【问题描述】:
为了在 一个 docker 容器中运行多个服务(我知道这不是它的意图),我从here 中选择了一个官方 docker 镜像
并通过安装supervisor扩展Dockerfile:
RUN apt-get update && \
apt-get install -y supervisor && \
apt-get clean
RUN mkdir -p /var/log/supervisor
COPY ./supervisord.conf /etc/supervisord.conf
EXPOSE 27017 9001
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
还有supervisord.conf 文件:
[supervisord]
nodaemon=true
[program:mongo]
user=root
command=/usr/bin/mongod --port 27017 --quiet --logpath /var/log/mongodb/mongod.log --logappend
process_name=%(program_name)s
autostart=true
user=root
startsecs=3
redirect_stderr=true
stdout_logfile=/var/log/mongod.log
为了简单起见,我只是发布 mongodb 服务。使用 docker-compose 我正在启动由主管管理的 mongodb docker-container 和另一个尝试连接到数据库的服务:
version: '3.7'
services:
mongodb:
restart: on-failure:2
image: mongodb
container_name: mongodb
ports:
- "27017:27017"
init: true
networks:
- mongonet
healthcheck:
test: "exit 0"
volumes:
- ./datadir:/var/lib/mongo
#
login-service:
restart: on-failure:2
container_name: login-service
image: login-service
depends_on:
- mongodb
ports:
- "8082:8082"
networks:
- mongonet
healthcheck:
test: "exit 0"
networks:
mongonet:
driver: bridge
这会产生以下错误:
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-4.0.5.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212]
好像我缺少一个网络配置。我尝试在/etc/mongod.conf.orig 中更改bindIP,但似乎mongodb 服务在重新启动后没有获取此配置。日志告诉我 mongodb 正在等待连接:
{"t":{"$date":"2020-12-17T10:07:37.020+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}
是否缺少主管命令的某种参数?任何帮助将不胜感激。
【问题讨论】:
标签: mongodb docker supervisord