Docker 容器未连接 mongodb 主机
Docker container not connecting mongodb host
我正面临来自 docker 容器的 MongoDB 连接问题,我阅读了一些 Whosebug 的答案,但没有帮助我解决我的问题。
我的 application.yml 文件有以下内容,
spring:
application:
name: web-ui-service
data:
mongodb:
uri: mongodb://<username>:<pwd>@172.17.0.1:27017/database
我的 docker-compose 文件有以下内容,
版本:'3.5'
服务:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- DOCKER_HOST_IP=mongodb://172.17.0.1:27017
- SPRING_DATA_MONGODB_DATABASE=swimming-pool
ports:
- 8080:8080
networks:
- swimming-pool-app
restart: unless-stopped
networks:
swimming-pool-app:
default:
driver: bridge
我读了这个博客From inside of a Docker container, how do I connect to the localhost of the machine?
但仍然面临以下问题,
sp-app-web-ui | com.mongodb.MongoSocketOpenException: 打开套接字异常
sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.2.jar!/:na]
sp-app-web-ui |在 com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.2.jar!/:na]
sp-app-web-ui |在 com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.2.jar!/:na]
sp-app-web-ui |在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
sp-app-web-ui |原因:java.net.ConnectException:连接被拒绝(Connection refused)
sp-app-web-ui |在 java.net.PlainSocketImpl.socketConnect(本机方法)~[na:1.8.0_111]
sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111]
sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111]
sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_111]
sp-app-web-ui |在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_111]
sp-app-web-ui |在 java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_111]
sp-app-web-ui |在 com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.2.jar!/:na]
sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.2.jar!/:na]
我正在使用 Debian 和 Docker 18.06。如果有人帮助我,那就太好了。提前致谢!
您可能正在寻找的是将 network_mode: "host"
添加到您的 docker 撰写服务:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- DOCKER_HOST_IP=mongodb://172.17.0.1:27017
- SPRING_DATA_MONGODB_DATABASE=swimming-pool
ports:
- 8080:8080
# https://docs.docker.com/compose/compose-file/#network_mode
network_mode: "host"
您可以在 docs
中阅读更多信息
我已经解决了这个问题,我的 docker-compose 文件如下所示,
version: '3.5'
services:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- SPRING_PROFILES_ACTIVE=dev
ports:
- 8080:8080
network_mode: host
并在 mongo.conf 文件中的 bindIp 变量中添加“127.0.0.1”。
我的 application.yml 有以下内容,
spring:
application:
name: web-ui-service
data:
mongodb:
uri: mongodb://<username>:<pwd>@172.0.0.1:27017/database
当你在 linux.
上 ping ip a 时,这个 IP 127.0.0.1 从 docker0 得到它
使用下面的docker-compose.yml。然后 运行 mongodb 和 mongo-express (UI 访问 mongodb)
version: '3.1'
services:
mongo:
image: mongo:4.4.5
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
我正面临来自 docker 容器的 MongoDB 连接问题,我阅读了一些 Whosebug 的答案,但没有帮助我解决我的问题。
我的 application.yml 文件有以下内容,
spring:
application:
name: web-ui-service
data:
mongodb:
uri: mongodb://<username>:<pwd>@172.17.0.1:27017/database
我的 docker-compose 文件有以下内容,
版本:'3.5' 服务:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- DOCKER_HOST_IP=mongodb://172.17.0.1:27017
- SPRING_DATA_MONGODB_DATABASE=swimming-pool
ports:
- 8080:8080
networks:
- swimming-pool-app
restart: unless-stopped
networks:
swimming-pool-app:
default:
driver: bridge
我读了这个博客From inside of a Docker container, how do I connect to the localhost of the machine?
但仍然面临以下问题,
sp-app-web-ui | com.mongodb.MongoSocketOpenException: 打开套接字异常 sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_111] sp-app-web-ui |原因:java.net.ConnectException:连接被拒绝(Connection refused) sp-app-web-ui |在 java.net.PlainSocketImpl.socketConnect(本机方法)~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_111] sp-app-web-ui |在 com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.2.jar!/:na]
我正在使用 Debian 和 Docker 18.06。如果有人帮助我,那就太好了。提前致谢!
您可能正在寻找的是将 network_mode: "host"
添加到您的 docker 撰写服务:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- DOCKER_HOST_IP=mongodb://172.17.0.1:27017
- SPRING_DATA_MONGODB_DATABASE=swimming-pool
ports:
- 8080:8080
# https://docs.docker.com/compose/compose-file/#network_mode
network_mode: "host"
您可以在 docs
中阅读更多信息我已经解决了这个问题,我的 docker-compose 文件如下所示,
version: '3.5'
services:
sp-app-web-ui:
container_name: sp-app-web-ui
image: swimming-pool/web-ui-service
environment:
- SPRING_PROFILES_ACTIVE=dev
ports:
- 8080:8080
network_mode: host
并在 mongo.conf 文件中的 bindIp 变量中添加“127.0.0.1”。
我的 application.yml 有以下内容,
spring:
application:
name: web-ui-service
data:
mongodb:
uri: mongodb://<username>:<pwd>@172.0.0.1:27017/database
当你在 linux.
上 ping ip a 时,这个 IP 127.0.0.1 从 docker0 得到它使用下面的docker-compose.yml。然后 运行 mongodb 和 mongo-express (UI 访问 mongodb)
version: '3.1'
services:
mongo:
image: mongo:4.4.5
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/