docker 码头桥网络DNS

c6ubokkw  于 2023-01-16  发布在  Docker
关注(0)|答案(2)|浏览(188)

我有两个容器运行在默认的码头桥网络上,守护进程在一个特定的范围内为它们分配了一个“临时”IP。

network_mode: bridge -> 172.17.0.X

我怎样才能通过一些别名或名字联系到对方?

uyhoqukh

uyhoqukh1#

让我们以运行基本映像Ubuntu:16.04的容器为例:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2461f410228b        ubuntu:16.04        "/bin/bash"         20 minutes ago      Up 20 minutes                           competent_shockley
6da9d8196637        ubuntu:16.04        "/bin/bash"         21 minutes ago      Up 21 minutes                           hungry_mccarthy

Docker提供的默认网络,要了解有关默认网络的更多信息,请参阅此处:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f83800356529        bridge              bridge              local
8169b2246500        host                host                local
b61e4f39c0ec        none                null                local

让我们使用docker inspect找出容器的IP地址:

$ docker inspect 2461f410228b | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.18.0.3",
                    "IPAddress": "172.18.0.3",

$ docker inspect 6da9d8196637 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.18.0.2",

默认情况下,在BRIDGE网络中启动的container将能够访问在同一网络中启动的其他container

root@2461f410228b:/# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.051 ms

当您希望使用名称/别名访问其他容器时,请在文件/etc/hosts中添加目标容器信息以解析DNS:

root@2461f410228b:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3      2461f410228b
172.18.0.2      docker2

现在尝试使用以下主机名访问目标容器:

root@2461f410228b:/# ping docker2
PING docker2 (172.18.0.2) 56(84) bytes of data.
64 bytes from docker2 (172.18.0.2): icmp_seq=1 ttl=64 time=0.077 ms

我相信这在某程度上会有所帮助。

w8f9ii69

w8f9ii692#

我在一个Docker容器中运行Sping Boot jar,并希望连接到在另一个容器中运行的Oracle数据库application.properties。

spring.datasource.url=jdbc:oracle:thin:@oracle:1521/xepdb1

在我的Windows C:\Windows\System32\drivers\etc\hosts文件中,我将“oracle”解析为本地主机IP,这样我就可以从Eclipse作为Java应用程序运行...

127.0.0.1 oracle

通过docker inspect命令,我能够确定Oracle容器的IP地址为172.17.0.2。
当我运行我的 Boot 容器时,我使用--add-host开关将“oracle”解析为数据库容器的IP地址...

docker run --add-host=oracle:172.17.0.2 -p 9090:8080 -dit --name <name> <image>

在Jenkins post build批处理命令中,我捕获正在运行的数据库容器的IP,并在启动时将其传递给应用程序容器...

for /F %%x in ('docker inspect -f "{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}" oracle-xe') do set ip=%%x
docker run --add-host=oracle:%ip% -p 9090:8080 -dit --name demo demo

相关问题