[英]Hostname host.docker.internal is pointing to the wrong IP address
在服務器 A 上,我們在一個 Docker 容器配置中使用“host.docker.internal”從同一服務器 A 上的另一個容器訪問該容器。我們想在另一台服務器 - 服務器 B 上使用這個 Docker 環境,但是主機名“host .docker.internal”仍然指向服務器A的IP地址。
清除緩存、完全重新安裝容器都無濟於事。 服務器 B 上的主機名“host.docker.internal”仍然指向服務器 A。
問題: IP和主機名“host.docker.internal”之間的綁定記錄在哪里? 如何將其更新為正確的 IP 地址?
docker-compose.yaml
version: '3.2'
services:
postgres:
build:
context: .
dockerfile: ./docker_files/postgres.Dockerfile
container_name: ${POSTGRES_CONTAINER_NAME}
restart: always
ports:
- target: ${POSTGRES_TARGET_PORT} # the port inside the container
published: ${POSTGRES_PUBLISHED_PORT} # the publicly exposed port
protocol: tcp # the port protocol (tcp or udp)
mode: host
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- panter_docker_network
volumes:
- ${HOST_TRANSFER_DIRECTORY}:/tmp/host/
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
networks:
panter_docker_network:
driver: bridge
postgres.Dockerfile
:
FROM postgres:15.1
RUN set -eux; \
apt-get update && apt-get install -y \
vim \
zip \
procps \
locales \
lsb-release \
libicu-dev \
iproute2 \
unzip \
iputils-ping && \
mkdir /tmp/host/
USER root
有不同版本的 Docker 和host.docker.internal
由 Docker Desktop 定義,而不是由 Linux 上的 Docker 定義。
能夠到達主機的唯一可靠方法是在docker run
命令上使用--add-host host.docker.internal:host-gateway
,就像這樣
docker run --rm --add-host host.docker.internal:host-gateway busybox ping host.docker.internal
這將運行busybox
圖像並 ping 主機。
您說兩個容器上的 IP 地址都指向服務器 A。在 Docker 創建的 bridge.networks 上,網關通常具有相同的地址。 在 Linux 上,主機地址始終為 172.17.0.1。 這些是 docker.network 上的本地地址,因此如果您有兩台主機,兩台機器上的主機地址 on.networks 都將是 172.17.0.1,因此看起來它們可能指向同一台服務器。 但由於它們是本地的,因此它們實際上確實指向各自的主機。
我覺得這是一個糟糕的解釋。 但是,如果您有一個容器在主機 A 上運行,一個容器在主機 B 上運行,它們的主機地址都是相同的 IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.