我有 2 個 docker 容器(1 個用于資料庫,1 個用于應用服務器)。應用程式代碼在連接字串中包含資料庫的主機。我希望能夠在不修改任何代碼(包括連接字串/主機配置)的情況下運行該應用程式。
我的想法是向應用程式容器上的 /etc/hosts 檔案添加一些內容,以便資料庫主機決議到另一個容器,但不確定我可以設定什么 IP 地址。每次創建容器時,IP 都可能不同,對嗎?下面的作業有點但我需要更持久的東西。
172.23.0.2 database.mycompany.com
如果我可以在 /etc/hosts 中指定這樣的東西會很酷
db-container-name database.mycompany.com
編輯:很多非常有用的評論,但遺漏的一件事是我在代碼庫中有一個連接字串,我不想更改代碼:
<New >
<Set name="URL">jdbc:oracle:thin:@db.mycompany.com:1532:SVC</Set>
</New>
如果我想使用容器名稱,我必須將上面的配置更改為容器名稱。我已經測驗過并且它有效,但我無法檢查它,所以我需要一些不會改變代碼的東西。下面提到的靜態 IP 地址選項可能是我最好的選擇,一旦我可以測驗它就會確認答案。
uj5u.com熱心網友回復:
這是示例 docker-compose.yml。
檢查下面的靜態 IP 分配:
version: '3.8'
services:
nginx: <- DNS Name
image: nginx
container_name: qs
restart: always
ports:
- 80:80
volumes:
- ~/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- server01
networks:
nginx:
ipv4_address: 10.1.1.10 <- Static IP
networks:
nginx:
driver: bridge
ipam:
config:
- subnet: 10.1.1.0/24 <- Static IP subnet
通過這個你可以消除動態IP的問題
您可以創建多個網路并根據您的連接要求進行分配。
networks:
nginx:
driver: bridge
ipam:
config:
- subnet: 10.1.1.0/24
db:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24
就像在這里你可以看到有 2 個網路,我如何使用這是我的應用程式容器,nginx 在 nginx 網路上,我的資料庫和應用程式在 db 網路上。所以我的資料庫來自通過 nginx 訪問我的應用程式的客戶。并且不需要為資料庫打開到主機的埠,因為容器到容器的連接不需要打開埠。
uj5u.com熱心網友回復:
您可以在同一網路中運行容器,并使用其他容器的名稱呼叫每個容器。
創建網路:
docker network create my-network
運行第一個容器:
docker run --name mydb -d --expose <some_port> --network=my-network mydbimage
運行將連接的第二個容器:
docker run --name myserver -d -e DB_HOST=mydb --network=my-network myserverimage
對于此示例,您可以使用 DB_HOST 環境進行連接
uj5u.com熱心網友回復:
好的,所以我想出了一個解決方法。我可以呼叫我的容器 database.mycompany.com,因為 docker 會自動為每個容器名稱創建 dns 映射。由于代碼參考了 database.mycompany.com,因此無需更改代碼,一切都可以正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/353072.html
