国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Wie verbinde ich mich innerhalb eines Docker-Containers mit dem Localhost der Maschine?
P粉787820396
P粉787820396 2023-08-23 11:55:48
0
2
836
<p>Ich habe einen Nginx, der in einem Docker-Container l?uft. Auf dem Hostsystem l?uft MySql. Ich m?chte von meinem Container aus eine Verbindung zu MySql herstellen. MySql bindet nur an das Localhost-Ger?t. </p> <p>Gibt es eine M?glichkeit, von diesem Docker-Container aus eine Verbindung zu diesem MySQL oder einem anderen Programm auf localhost herzustellen? </p> <p>Diese Frage unterscheidet sich von ?So erhalten Sie die IP-Adresse des Docker-Hosts aus dem Docker-Container“, da die IP-Adresse des Docker-Hosts eine ?ffentliche IP oder eine private IP im Netzwerk sein kann ist m?glicherweise nicht vom Docker-Container aus zug?nglich (ich meine ?ffentliche IP, wenn sie auf AWS oder anderswo gehostet wird). Selbst wenn Sie über die IP-Adresse des Docker-Hosts verfügen, bedeutet dies nicht, dass Sie vom Container aus eine Verbindung zum Docker-Host herstellen k?nnen, da Ihr Docker-Netzwerk ein Overlay-Netzwerk, ein Host-Netzwerk, ein Bridge-Netzwerk oder ein Macvlan-Netzwerk sein kann , ein Nicht-Netzwerk usw., wodurch die Erreichbarkeit des Containers auf diese IP-Adresse eingeschr?nkt wird. </p>
P粉787820396
P粉787820396

Antworte allen(2)
P粉517090748

適用于所有平臺(tái)

Docker v 20.10 及更高版本(自 2020 年 12 月 14 日起)

使用您的內(nèi)部 IP 地址或連接到特殊 DNS 名稱 host.docker.internal,該名稱將解析為主機(jī)使用的內(nèi)部 IP 地址。

這是出于開發(fā)目的,不適用于 Docker Desktop 之外的生產(chǎn)環(huán)境。

Linux 警告

要在 Linux 上的 Docker 中啟用此功能,請(qǐng)將 --add-host=host.docker.internal:host-gateway 添加到您的 docker 命令啟用該功能。

要在 Linux 上的 Docker Compose 中啟用此功能,請(qǐng)將以下行添加到容器定義中:

extra_hosts:
    - "host.docker.internal:host-gateway"

根據(jù)一些用戶的說(shuō)法,特殊的 DNS 名稱僅在 Docker 的默認(rèn)bridge 網(wǎng)絡(luò)中有效,而在自定義網(wǎng)絡(luò)中無(wú)效。

對(duì)于舊版 macOS 和 Windows 版本的 Docker

Docker v 18.03 及更高版本(自 2018 年 3 月 21 日起)

使用您的內(nèi)部 IP 地址或連接到特殊 DNS 名稱 host.docker.internal,該名稱將解析為主機(jī)使用的內(nèi)部 IP 地址。

Linux 支持待定 https://github.com/docker/for-linux/issues /264

對(duì)于舊版 macOS 版本的 Docker

Docker for Mac v 17.12 至 v 18.02

與上面相同,但使用docker.for.mac.host.internal

Docker for Mac v 17.06 至 v 17.11

與上面相同,但使用docker.for.mac.localhost代替。

適用于 Mac 17.05 及更低版本的 Docker

要從 docker 容器訪問(wèn)主機(jī),您必須將 IP 別名附加到您的網(wǎng)絡(luò)接口。您可以綁定任何您想要的 IP,只要確保您沒有將其用于其他任何地方即可。

sudo ifconfig lo0 別名 123.123.123.123/24

然后確保您的服務(wù)器正在偵聽上述 IP 或 0.0.0.0。如果它正在監(jiān)聽本地主機(jī)127.0.0.1,它將不接受連接。

然后只需將你的docker容器指向這個(gè)IP就可以訪問(wèn)主機(jī)了!

要進(jìn)行測(cè)試,您可以在容器內(nèi)運(yùn)行類似 curl -X GET 123.123.123.123:3000 的內(nèi)容。

別名將在每次重新啟動(dòng)時(shí)重置,因此如有必要,請(qǐng)創(chuàng)建啟動(dòng)腳本。

此處的解決方案和更多文檔:https ://docs.docker.com/desktop/networking/#use-cases-and-workarounds-for-all-platforms

P粉019353247

編輯:

如果您使用Docker-for-macDocker-for-Windows 18.03+,使用主機(jī) host.docker.internal (而不是 127.0.0.1 在您的連接字符串中)。

如果您使用的是 Docker-for-Linux 20.10.0+,您還可以使用主機(jī) host.docker.internal if您使用 --add-host host.docker.internal:host-gateway 選項(xiàng)啟動(dòng)了 Docker 容器,或者在 docker-compose.yml 文件中添加了以下代碼段:

extra_hosts:
    - "host.docker.internal:host-gateway"

否則,請(qǐng)閱讀下文


TLDR

docker run 命令中使用 --network="host",然后 docker 容器中的 127.0.0.1 將指向您的碼頭工人主機(jī)。

注意:此模式僅適用于 Linux 版 Docker,根據(jù)文檔。 p>


關(guān)于 docker 容器網(wǎng)絡(luò)模式的注意事項(xiàng)

Docker 在運(yùn)行容器時(shí)提供不同的網(wǎng)絡(luò)模式。根據(jù)您選擇的模式,您將以不同方式連接到在 docker 主機(jī)上運(yùn)行的 MySQL 數(shù)據(jù)庫(kù)。

docker run --network="bridge"(默認(rèn))

Docker 默認(rèn)創(chuàng)建一個(gè)名為 docker0 的網(wǎng)橋。 docker 主機(jī)和 docker 容器在該網(wǎng)橋上都有一個(gè) IP 地址。

在 Docker 主機(jī)上,輸入 sudo ip addr show docker0 您將得到如下所示的輸出:

[vagrant@docker:~] $ sudo ip addr show docker0
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::5484:7aff:fefe:9799/64 scope link
       valid_lft forever preferred_lft forever

因此,我的 docker 主機(jī)在 docker0 網(wǎng)絡(luò)接口上的 IP 地址為 172.17.42.1。

現(xiàn)在啟動(dòng)一個(gè)新容器并在其上獲取 shell:docker run --rm -it ubuntu:trusty bash 并在容器中輸入 ip addr show eth0了解其主網(wǎng)絡(luò)接口是如何設(shè)置的:

root@e77f6a1b3740:/# ip addr show eth0
863: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 66:32:13:f0:f1:e3 brd ff:ff:ff:ff:ff:ff
    inet 172.17.1.192/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::6432:13ff:fef0:f1e3/64 scope link
       valid_lft forever preferred_lft forever

這里我的容器的 IP 地址為 172.17.1.192?,F(xiàn)在查看路由表:

root@e77f6a1b3740:/# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0

因此,docker 主機(jī)的 IP 地址 172.17.42.1 被設(shè)置為默認(rèn)路由,并且可以從您的容器訪問(wèn)。

root@e77f6a1b3740:/# ping 172.17.42.1
PING 172.17.42.1 (172.17.42.1) 56(84) bytes of data.
64 bytes from 172.17.42.1: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 172.17.42.1: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 172.17.42.1: icmp_seq=3 ttl=64 time=0.116 ms

docker run --network="host"

或者,您可以運(yùn)行 Docker 容器,并將 網(wǎng)絡(luò)設(shè)置設(shè)置為 主機(jī)。這樣的容器將與 docker 主機(jī)共享網(wǎng)絡(luò)堆棧,從容器的角度來(lái)看,localhost(或127.0.0.1)將引用 docker 主機(jī)。 p>

請(qǐng)注意,在 docker 容器中打開的任何端口都將在 docker 主機(jī)上打開。這不需要 -p 或 -P docker run選項(xiàng)

我的 docker 主機(jī)上的 IP 配置:

[vagrant@docker:~] $ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:98:dc:aa brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe98:dcaa/64 scope link
       valid_lft forever preferred_lft forever

以及來(lái)自 主機(jī) 模式下的 docker 容器:

[vagrant@docker:~] $ docker run --rm -it --network=host ubuntu:trusty ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:98:dc:aa brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe98:dcaa/64 scope link
       valid_lft forever preferred_lft forever

正如您所看到的,docker 主機(jī)和 docker 容器共享完全相同的網(wǎng)絡(luò)接口,因此具有相同的 IP 地址。


從容器連接到 MySQL

橋接模式

要從橋接模式的容器訪問(wèn)在 docker 主機(jī)上運(yùn)行的 MySQL,您需要確保 MySQL 服務(wù)正在偵聽 172.17.42.1 IP 地址上的連接.

為此,請(qǐng)確保您的 MySQL 配置文件 (my.cnf) 中有 bind-address = 172.17.42.1bind-address = 0.0.0.0 )。

如果需要使用網(wǎng)關(guān)的IP地址設(shè)置環(huán)境變量,可以在容器中運(yùn)行以下代碼:

export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')

然后在您的應(yīng)用程序中,使用 DOCKER_HOST_IP 環(huán)境變量打開與 MySQL 的連接。

注意:如果您使用bind-address = 0.0.0.0,您的MySQL服務(wù)器將偵聽所有網(wǎng)絡(luò)接口上的連接。這意味著您的 MySQL 服務(wù)器可以從 Internet 訪問(wèn);確保相應(yīng)地設(shè)置防火墻規(guī)則。

注意2:如果您使用bind-address = 172.17.42.1,您的MySQL服務(wù)器將不會(huì)偵聽與127.0.0.1建立的連接>。在 docker 主機(jī)上運(yùn)行的想要連接到 MySQL 的進(jìn)程必須使用 172.17.42.1 IP 地址。

主機(jī)模式

要從主機(jī)模式下的容器訪問(wèn)在 docker 主機(jī)上運(yùn)行的 MySQL,您可以在 MySQL 配置中保留 bind-address = 127.0.0.1 并連接到 127.0.0.1 來(lái)自您的容器:

[vagrant@docker:~] $ docker run --rm -it --network=host mysql mysql -h 127.0.0.1 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.41-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

注意:請(qǐng)使用mysql -h 127.0.0.1,而不是mysql -h localhost;否則 MySQL 客戶端將嘗試使用 unix 套接字進(jìn)行連接。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage