簡體   English   中英

在 Ubuntu 18.04 上訪問 Docker 容器中的主機

[英]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 )網絡接口創建別名。

所以這里是說明:

  1. 首先,為lo接口創建一個別名。 您可能知道,在 Ubuntu 18.04 上不存在ifconfig命令,所以我們這樣做:

sudo ip addr add 192.168.0.20/24 dev lo label lo:1

  1. 然后,把它放在你的 docker-compose.yml文件中:
extra_hosts:
      - "otherhost:192.168.0.20"

如果您不使用Docker Compose,您可以通過--add-host標志將主機添加到容器中。 類似於docker run container-name --add-host="otherhost:192.168.0.20"

  1. 最后,完成上述步驟后,使用docker-compose down && docker-compose up -ddocker-compose restart容器

現在您可以登錄到您的容器( docker-compose exec container-name bash )並對其進行測試。

注意:使用telnet [interface-ip] [port]命令確保您的工作端口已打開。

你可以在你的extra_hosts -compose中使用extra_hosts ,這是你自己發現的。 當您在本地環境中工作時,我只是想添加另一種方式。

docker-for-macdocker-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM