一千萬個為什麽

搜索

為什麽docker-compose不從MySQL容器中查找IP地址?


我的own_app需要一個MySQL數據庫。問題是own_app容器需要到MySQL數據庫的IP地址。我的目標是通過使用docker-compose.yml來解決這個問題。

Dockerfile </強>

ENTRYPOINT ["docker-entrypoint.sh"]

搬運工-compose.yml </強>

根據 Wordpress示例,docker-compose.yml稍作修改如下:

version: '2'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   own_app:
     depends_on:
       - db
     image: own_app:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       MYSQL_DB_HOST: db:3306
volumes:
    db_data:

but it inserts db:3306

db.default.url="jdbc:mysql://db:3306/database_name"

而不是IP地址

問題</強>

The sed statement that resides in the docker-entrypoint.sh works well, i.e. it replaces localhost with the $MYSQL_DB_HOST environment variable. The problem is that docker-compose returns db:3306 instead of :3306

問題</強>

為什麽docker-compose不查找IP地址?

最佳答案

docker-compose中的環境變量只是字符串,它不知道它是主機名還是其他任何文本。所做的唯一解析是展開 $ {varname} 語法中的變量。

為了將容器連接在一起,無論如何你都不需要IP地址,它們可以改變。使用基於DNS的發現,它將解析位於同一網絡上的任何其他容器中服務名稱中的“db”。

轉載註明原文: 為什麽docker-compose不從MySQL容器中查找IP地址?

猜你喜歡