![](/img/trans.png)
[英]Accessing a Docker MySQL server from the host machine, without needing the container's IP address
[英]How to get a Docker container's IP address, located within a bridge network, from a windows host?
使用以下命令在 docker 中創建了橋接網絡:
docker network create blognetwork
並且已經在該網絡中創建了一個容器,其內容如下:
docker run --name=blogdb --network=blognetwork -p 3306:3306 -e --bind-address=0.0.0.0 -e=MYSQL_ROOT_PASSWORD=mypassword -detach mysql
如何從 Windows 主機訪問“blognetwork”中新容器的 IP 地址?
如何自行獲取 XXXX 形式的 IP 地址? 我知道我可以使用以下內容來獲取包含此數據的大型 json 輸出:
docker network inspect blognetwork
您可以使用 docker inspect 直接獲取 IP 地址。 Docker inspect 提供有關由 Docker 控制的構造的詳細信息。
現代 Docker 客戶端語法是:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
舊的 Docker 客戶端語法是:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
這些命令將返回 Docker 容器的 IP 地址。
如果您使用的是 Windows,請在花括號周圍使用雙引號 " 而不是單引號 '。
有關更多信息Docker 檢查文檔。
這是獲取容器信息和容器 IP 的命令。
docker inspect 'ContainerID'
既然你跑了
docker run -p 3306:3306 ...
您應該使用主機的 DNS 名稱或 IP 地址通過端口 3306 訪問該服務。
在非常特殊的情況下,您在運行docker run
的機器上的 shell 提示符或瀏覽器 URL 條目中,假設您沒有使用 Docker Machine 或 Docker Toolbox,在這種情況下(僅在這種情況下),您可以使用localhost:3306
訪問容器。 永遠不要將localhost
用於 Docker 周圍的任何其他東西,除非您完全清楚它的含義。 (如果您開始寫一個使用“...的本地主機...”字樣的問題,那么 localhost 不是您想要的。)
如果您嘗試從另一個容器訪問此容器,因為您運行了
docker run --name=blogdb --network=blognetwork ...
您可以使用名稱blogdb
作為主機名,Docker 提供了一個內部 DNS 服務,可以將其解析為將到達容器的內容。
您永遠不需要 Docker 內部 IP 地址,也不應該運行docker inspect
來嘗試找到它。 它的兩個最大問題是它無法從主機外訪問,並且當容器被刪除和重新創建時它會發生變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.