从 Docker 容器内部获取 Docker 主机的 IP 地址
IP地址是指互联网协议地址,一个数值,语法为192.168.0.1。 IP地址唯一标识连接到网络的设备,它还帮助我们访问互联网上运行在不同设备上的应用程序。
应用程序可以在两种环境中运行:本地主机或远程服务器(如 AWS)。 这些应用程序使用主机的 IP 地址来访问在其上运行的应用程序或容器。
由于我们通常在本地主机上开发和运行应用程序,因此本教程不会涵盖在生产环境中运行的应用程序。 在本教程中,我们将了解如何从 Docker 容器内部获取 Docker 主机的 IP 地址。
创建一个新项目
打开 WebStorm IDEA 并选择文件 > 新建 > 项目。 在打开的窗口中,选择 Empty Project 并将项目名称从 untitled 更改为 docker-host-ip 或使用您喜欢的任何名称。
最后,按创建按钮生成一个空项目。
为了测试此应用程序,我们将使用 Nginx 来显示包含随机生成的文本的网页。 创建一个 index.html 文件并将以下代码复制并粘贴到该文件中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lorem ipsum text</title>
</head>
<body>
<p>Magna elaboraret dictumst sed quidam potenti tempus
principes morbi. Sit libero et eruditi lectus nonumes simul.
Dicam putent diam volumus similique ponderum sententiae maecenas mattis ridens.
Homero iisque regione voluptatibus nullam detraxit nullam eleifend brute.
Ligula orci dicat ac luptatum quisque appareat invidunt odio mazim.
Reformidans impetus facilis veniam fringilla.
Consectetur eros ferri congue latine constituto veritus persequeris dolorum felis.
Harum felis theophrastus aliquam wisi nibh nec assueverit mi nonumes.
Cubilia option ei ex vulputate at habeo aliquet omittantur delectus.
Sanctus dolorem moderatius venenatis agam suscipit comprehensam imperdiet amet.</p>
</body>
</html>
要生成此文本,请安装 Lorem 插件并在您的开发环境中按代码 > 生成 > 生成文本以生成包含 10 个句子的文本。
定义镜像
创建一个名为 Dockerfile 的文件,然后将以下说明复制并粘贴到该文件中。
FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
- FROM - 这定义了使用后续指令在其上创建自定义图像的基础图像。
- COPY - 这会将当前目录中的所有文件和目录复制到图像文件系统目标 /usr/share/nginx/html。
要了解有关使用 Nginx 映像的更多信息,Docker hub Nginx 官方映像提供了有关创建映像和从中运行容器的详细信息。
构建 Nginx 镜像
要构建我们应用程序的 Nginx 映像,请使用以下命令创建一个带有标签 host-ip:latest 的映像。
~/WebstormProjects/docker-host-ip$ docker build --tag host-ip:latest .
此命令顺序执行 Dockerfile 的指令。 可以从终端窗口查看该过程,如下所示。
=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23 0.0s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c374086 0.2s
=> [2/2] COPY . /usr/share/nginx/html
运行容器
在本节中,我们希望从正在运行的容器中查看主机的 IP 地址。 由于我们没有正在运行的容器,我们首先需要使用以下命令运行一个容器。
~/WebstormProjects/docker-host-ip$ docker run --name host-ip-service -d -p 8000:80 host-ip:latest
此命令运行一个名为 host-ip-service 的容器,该容器在主机上公开端口 8000 以侦听容器上的 post 80。 要查看应用程序的内容,请在浏览器上向 localhost:8000 (http://localhost:8000/
) 发出请求,将显示一个包含随机文本的网页。
从 Docker 容器内部获取 Docker 主机的 IP 地址
由于我们想在正在运行的容器中运行命令,因此使用以下命令 bash 到 Docker 容器中。
$ docker exec -it host-ip-service /bin/sh
输出:
/ #
要获取运行我们的容器 host-ip-service 的 docker 主机的 IP 地址,请键入以下命令并按键盘上的 Enter 按钮。
/ # /sbin/ip route|awk '/default/ { print $3 }'
输出:
172.17.0.1
请注意
,由于我们使用的是 Docker 网桥,这是容器的默认设置,我们将获得网桥的 IP 地址,即 172.17.0.1,而不是主机连接的网络上的 IP 地址。
总结
在本文中,我们学习了利用 Nginx 应用程序从容器内部获取 Docker 主机的 IP 地址。 请注意,根据容器运行的位置,还有其他方法可以实现相同的目标,我们应该自由使用满足要求的任何方法。
相关文章
在 Linux 中托管 Docker Internal
发布时间:2023/04/18 浏览次数:139 分类:Docker
-
Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。
在 Docker 中设置工作目录
发布时间:2023/04/18 浏览次数:82 分类:Docker
-
在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。
在 Docker 容器中公开多个端口
发布时间:2023/04/18 浏览次数:143 分类:Docker
-
Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。
将用户添加到 Docker 容器
发布时间:2023/04/18 浏览次数:187 分类:Docker
-
在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。
使用 Docker 网络主机命令
发布时间:2023/04/18 浏览次数:112 分类:Docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
清除 Docker 容器日志
发布时间:2023/04/18 浏览次数:181 分类:Docker
-
本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。
Dockerfile 中 COPY 和 ADD 命令的区别
发布时间:2023/04/18 浏览次数:158 分类:Docker
-
在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。本文介绍了 Dockerfile 中 COPY 和 ADD 命令之间的区别。