我正在我的 Docker 容器中運行一個 Web 應用程式的實體,并且還運行一個 MongoDB 容器,因此當我啟動 Web 應用程式時,我可以輕松地連接到應用程式連接頁面上的資料庫。
問題是我不確定如何從我的 Web 應用程式訪問 Mongo 容器,并且不確定我的主機/埠連接資訊是否正確。
我的 Docker 設定
如您所見,容器已啟動并運行,mongo 和 Web 應用程式服務均無錯誤運行

我通過建立這兩個 docker-compose.yml
version: "3.3"
services:
web:
image: grafana-asw-v3
container_name: grafana-asw-v3
restart: always
build: .
ports:
- "13000:3000"
volumes:
- grafana-storage:/var/lib/grafana
stdin_open: true
tty: true
db:
container_name: mongo
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- grafana-mongo-db:/var/lib/mongo
ports:
- "27018:27017"
volumes:
grafana-mongo-db: {}
grafana-storage: {}
問題
一切都啟動并運行后,我正在嘗試通過網路應用程式進行連接,但我似乎使用了錯誤的連接資訊...
我假設使用“hostMachine:port”(roxane:27018),但它沒有連接。有什么我在這里忽略的嗎?

uj5u.com熱心網友回復:
為了解決此問題,我必須進行兩項更改:
bind_ip通過對我的 docker-compose 檔案進行此更改來修改mongod.conf 中的
db:
container_name: mongo
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- grafana-mongo-db:/var/lib/mongo
ports:
- "27018:27017"
command: mongod --bind_ip 0.0.0.0
- 我需要在我們的應用程式的 cli 中參考 IP 地址而不是主機名。(感謝這個答案對這個問題的幫助)
uj5u.com熱心網友回復:
簡答
db服務與web不在host網路中的服務在同一網路中。- 當你通過你命名你的服務時,
container_name你應該能夠使用連接字串mongodb://mongo:27017
解釋
- 默認情況下,docker 容器在橋接網路下運行,允許它們在不查看主機網路的情況下進行通信。
ports在撰寫檔案中使用時,您定義要將容器的內部埠映射到主機埠
- "27018:27017" => 我想將容器埠號 27017 暴露給主機埠號 27018。
因此,您可以在不公開 mongo 服務的情況下公開您的 Web 前端:
version: "3.3"
services:
web:
image: grafana-asw-v3
container_name: grafana-asw-v3
restart: always
build: .
ports:
- "13000:3000"
volumes:
- grafana-storage:/var/lib/grafana
stdin_open: true
tty: true
db:
container_name: mongo
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- grafana-mongo-db:/var/lib/mongo
volumes:
grafana-mongo-db: {}
grafana-storage: {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/328949.html
