[英]Access host machine in Docker Container on Ubuntu 18.04
我正在尋找一種方法來連接到 Docker 容器中的主機(在我的情況下,訪問特定端口以在應用程序容器中使用代理)。
我嘗試了network_mode: "host"
(或docker run --network="host"
),它在訪問本地機器的情況下工作,但導致了一些其他與將網絡驅動程序更改為host
相關的問題:
SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失敗:名稱或服務未知。
此外,我無法使用ifconfig
來定義網絡別名,因為我使用的是 Ubuntu 18.04。
我該怎么辦?
更新:由於docker-host
( https://github.com/qoomon/docker-host ) 映像是在過去幾個月發布的,因此您無需任何手動配置即可使用它。 十分簡單!
折騰了一天,終於找到了解決辦法。 它可以通過docker docker run
命令中的--add-host標志或docker docker-compose.yml
文件中docker-compose.yml
,並為本地( lo | 127.0.0.1
)網絡接口創建別名。
所以這里是說明:
lo
接口創建一個別名。 您可能知道,在 Ubuntu 18.04 上不存在ifconfig
命令,所以我們這樣做: sudo ip addr add 192.168.0.20/24 dev lo label lo:1
extra_hosts:
- "otherhost:192.168.0.20"
如果您不使用Docker Compose,您可以通過--add-host
標志將主機添加到容器中。 類似於docker run container-name --add-host="otherhost:192.168.0.20"
docker-compose down && docker-compose up -d
或docker-compose restart
容器現在您可以登錄到您的容器( docker-compose exec container-name bash
)並對其進行測試。
注意:使用telnet [interface-ip] [port]
命令確保您的工作端口已打開。
你可以在你的extra_hosts
-compose中使用extra_hosts
,這是你自己發現的。 當您在本地環境中工作時,我只是想添加另一種方式。
在docker-for-mac和docker-for-windows 中,在容器內,DNS 名稱host.docker.internal
解析為允許網絡訪問主機的 IP 地址。
這是從文檔中提取的相關描述:
主機有一個不斷變化的 IP 地址(如果您沒有網絡訪問權限,則沒有)。 從 18.03 開始,我們的建議是連接到特殊的 DNS 名稱 host.docker.internal,它解析為主機使用的內部 IP 地址。 這是出於開發目的,不適用於 Docker for Windows 之外的生產環境。
github 上有一個關於為docker-for-linux實現此功能的未決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.