简体   繁体   English

是否可以将未容器化的 spring 引导应用程序连接到 MongoDB Docker 容器?

[英]Is possible to connect a not containerized spring boot app to MongoDB Docker container?

I've installed Minikube in my PC for using Docker. I'm tryin to connect a local spring boot app to mongo db on docker container but I get this error:我已经在我的电脑上安装了 Minikube 以使用 Docker。我正在尝试将本地 spring 启动应用程序连接到 docker 容器上的 mongo db,但我收到此错误:

com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_151]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_151]

This is my configuration:这是我的配置:

spring.data.mongodb.uri=mongodb://{mongo_db_ip}:27017/test 

I've tried with these IPs but none works:我试过这些 IP,但都不起作用:

° IP got from command minikube ip ° IP 从命令minikube ip

° IP got from docker inspect mongo (172.17.0.7) : ° IP 来自docker inspect mongo (172.17.0.7)

[
    {
        "Id": "a60664fa816c32bc738fffd414741bf726728bb3446512d7a48b886f96d0de24",
        "Created": "2020-04-13T08:04:51.981023712Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mongod"
        ],
        ...
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "acd0744e81967a40376d47d6d471d96d7f5b23f298c62e4e2931d9359c899966",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "27017/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/acd0744e8196",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "4b665d337577688b8a600ce7c07a3006ca34de2d5a0945d57f73a16e705c5651",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.7",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "xxx",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "f59dfca8fc755bc75a6fbdfb429b529be75b906cf1fb50437f5ebe9bc75c6f7b",
                    "EndpointID": "4b665d337577688b8a600ce7c07a3006ca34de2d5a0945d57f73a16e705c5651",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.7",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,...
                }
            }
        }
    }
]

° Localhost IP: localhost and 127.0.0.1 ° 本地主机 IP: localhost127.0.0.1

I ran mongodb container whit this command:我用这个命令运行了 mongodb 容器:

docker run --name=mongo mongo

Logs don't show any problem:日志没有显示任何问题:

2020-04-13T08:04:52.661+0000 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-04-13T08:04:52.662+0000 W  ASIO     [main] No TransportLayer configured during NetworkInterface startup
2020-04-13T08:04:52.663+0000 I  CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=a60664fa816c
2020-04-13T08:04:52.663+0000 I  CONTROL  [initandlisten] db version v4.2.5
2020-04-13T08:04:52.663+0000 I  CONTROL  [initandlisten] git version: 2261279b51ea13df08ae708ff278f0679c59dc32
2020-04-13T08:04:52.663+0000 I  CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
2020-04-13T08:04:52.664+0000 I  CONTROL  [initandlisten] allocator: tcmalloc
2020-04-13T08:04:52.664+0000 I  CONTROL  [initandlisten] modules: none
2020-04-13T08:04:52.664+0000 I  CONTROL  [initandlisten] build environment:
2020-04-13T08:04:52.664+0000 I  CONTROL  [initandlisten]     distmod: ubuntu1804
2020-04-13T08:04:52.665+0000 I  CONTROL  [initandlisten]     distarch: x86_64
2020-04-13T08:04:52.665+0000 I  CONTROL  [initandlisten]     target_arch: x86_64
2020-04-13T08:04:52.665+0000 I  CONTROL  [initandlisten] options: { net: { bindIp: "*" } }
2020-04-13T08:04:52.666+0000 I  STORAGE  [initandlisten]
2020-04-13T08:04:52.666+0000 I  STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-04-13T08:04:52.666+0000 I  STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-04-13T08:04:52.667+0000 I  STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=556M,cache_overflow=(file_max=0M),session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000,close_scan_interval=10,close_handle_minimum=250),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress],
2020-04-13T08:04:53.270+0000 I  STORAGE  [initandlisten] WiredTiger message [1586765093:270733][1:0x7f3cb7ad9b00], txn-recover: Set global recovery timestamp: (0, 0)
2020-04-13T08:04:53.277+0000 I  RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2020-04-13T08:04:53.286+0000 I  STORAGE  [initandlisten] Timestamp monitor starting
2020-04-13T08:04:53.290+0000 I  CONTROL  [initandlisten]
2020-04-13T08:04:53.291+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-04-13T08:04:53.293+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2020-04-13T08:04:53.294+0000 I  CONTROL  [initandlisten]
2020-04-13T08:04:53.295+0000 I  STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: afe59aef-96cf-43cf-8923-e9483157d7d0 and options: { uuid: UUID("afe59aef-96cf-43cf-8923-e9483157d7d0") }
2020-04-13T08:04:53.413+0000 I  INDEX    [initandlisten] index build: done building index _id_ on ns admin.system.version
2020-04-13T08:04:53.414+0000 I  SHARDING [initandlisten] Marking collection admin.system.version as collection version: <unsharded>
2020-04-13T08:04:53.414+0000 I  COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.2
2020-04-13T08:04:53.414+0000 I  SHARDING [initandlisten] Marking collection local.system.replset as collection version: <unsharded>
2020-04-13T08:04:53.414+0000 I  STORAGE  [initandlisten] Flow Control is enabled on this deployment.
2020-04-13T08:04:53.415+0000 I  SHARDING [initandlisten] Marking collection admin.system.roles as collection version: <unsharded>
2020-04-13T08:04:53.416+0000 I  STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 9061e9af-a095-452e-94b3-a5fcb9fd3a6c and options: { capped: true, size: 10485760 }
2020-04-13T08:04:53.426+0000 I  INDEX    [initandlisten] index build: done building index _id_ on ns local.startup_log
2020-04-13T08:04:53.427+0000 I  SHARDING [initandlisten] Marking collection local.startup_log as collection version: <unsharded>
2020-04-13T08:04:53.427+0000 I  FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2020-04-13T08:04:53.429+0000 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
2020-04-13T08:04:53.430+0000 I  STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with provided UUID: 436d0bd3-ebf8-4fd2-94f4-1bbce3eca74b and options: { uuid: UUID("436d0bd3-ebf8-4fd2-94f4-1bbce3eca74b") }
2020-04-13T08:04:53.431+0000 I  NETWORK  [listener] Listening on /tmp/mongodb-27017.sock
2020-04-13T08:04:53.431+0000 I  NETWORK  [listener] Listening on 0.0.0.0
2020-04-13T08:04:53.431+0000 I  NETWORK  [listener] waiting for connections on port 27017
2020-04-13T08:04:53.444+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: done building index _id_ on ns config.system.sessions
2020-04-13T08:04:53.457+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: starting on config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 } using method: Hybrid
2020-04-13T08:04:53.457+0000 I  INDEX    [LogicalSessionCacheRefresh] build may temporarily use up to 200 megabytes of RAM
2020-04-13T08:04:53.457+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: collection scan done. scanned 0 total records in 0 seconds
2020-04-13T08:04:53.459+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: inserted 0 keys from external sorter into index in 0 seconds
2020-04-13T08:04:53.461+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: done building index lsidTTLIndex on ns config.system.sessions
2020-04-13T08:04:53.463+0000 I  SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
2020-04-13T08:04:54.001+0000 I  SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>

I understand I could connect to my mongo database in Docker If I configure the correct IP. But, How I get the IP?我知道如果我配置正确的 IP,我可以连接到 Docker 中的 mongo 数据库。但是,我如何获得 IP?

Thanks for help me to solve my problem (Y)谢谢你帮我解决我的问题(Y)

you need to pass host port to the container port docker run -p 27017:27017 --name=mongo mongo您需要将主机端口传递给容器端口docker run -p 27017:27017 --name=mongo mongo

You can also use a host.network for a swarm service, by passing -.network host您还可以通过传递-.network host将 host.network 用于 swarm 服务

docker run -.network host --name=mongo mongo

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM