【Docker】容器连接

在 Docker 中,容器间的网络通信和端口映射是非常重要的。下面我们详细介绍 Docker 容器连接的相关内容,包括网络端口映射和 Docker 容器互联。

网络端口映射

端口映射基本命令

在启动容器时使用 -p--publish 参数进行端口映射。

sh 复制代码
docker run -d -p 8080:80 mywebserver

上面的命令将主机的 8080 端口映射到容器的 80 端口。这样,可以通过访问主机的 http://localhost:8080 来访问容器内的 Web 服务。

使用 -P 绑定端口

我们可以使用 -P 绑定端口号,它会自动将容器内部的端口随机映射到主机的端口。

sh 复制代码
docker run -d -P training/webapp python app.py

上面的命令将自动把容器的端口映射到主机的随机端口。使用 docker ps 可以看到容器端口 5000 绑定到主机端口 32768。

sh 复制代码
docker ps

输出示例:

sh 复制代码
CONTAINER ID    IMAGE               COMMAND            ...           PORTS                     NAMES
fce072cc88ce    training/webapp     "python app.py"    ...     0.0.0.0:32768->5000/tcp   grave_hopper

使用 -p 指定端口映射

也可以使用 -p 标识来指定容器端口绑定到主机端口。

sh 复制代码
docker run -d -p 5000:5000 training/webapp python app.py

使用 docker ps 查看端口映射情况:

sh 复制代码
docker ps

输出示例:

sh 复制代码
CONTAINER ID        IMAGE               COMMAND           ...           PORTS                     NAMES
33e4523d30aa        training/webapp     "python app.py"   ...   0.0.0.0:5000->5000/tcp    berserk_bartik

指定绑定的 IP 地址

可以通过指定绑定的 IP 地址来限制访问。

sh 复制代码
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

使用 docker ps 查看端口映射情况:

sh 复制代码
docker ps

输出示例:

sh 复制代码
CONTAINER ID        IMAGE               COMMAND           ...     PORTS                                NAMES
95c6ceef88ca        training/webapp     "python app.py"   ...  5000/tcp, 127.0.0.1:5001->5000/tcp   adoring_stonebraker

这样,我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。

绑定 UDP 端口

默认情况下,端口映射绑定的是 TCP 端口。如果要绑定 UDP 端口,可以在端口后面加上 /udp

sh 复制代码
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

使用 docker ps 查看端口映射情况:

sh 复制代码
docker ps

输出示例:

sh 复制代码
CONTAINER ID        IMAGE               COMMAND           ...   PORTS                                NAMES
6779686f06f6        training/webapp     "python app.py"   ...   5000/tcp, 127.0.0.1:5000->5000/udp   drunk_visvesvaraya

查看端口绑定情况

使用 docker port 命令可以快捷地查看端口的绑定情况。

sh 复制代码
docker port adoring_stonebraker 5000

输出示例:

sh 复制代码
127.0.0.1:5001

Docker 容器互联

容器命名

当我们创建一个容器时,Docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器。

sh 复制代码
docker run -d -P --name runoob training/webapp python app.py

使用 docker ps 查看容器名称:

sh 复制代码
docker ps -l

输出示例:

sh 复制代码
CONTAINER ID     IMAGE            COMMAND           ...    PORTS                     NAMES
43780a6eabaa     training/webapp   "python app.py"  ...     0.0.0.0:32769->5000/tcp   runoob

新建网络

可以创建一个新的 Docker 网络来连接容器。

sh 复制代码
docker network create -d bridge test-net

参数说明:

  • -d:指定 Docker 网络类型,有 bridge、overlay。

连接容器到网络

运行容器并连接到新建的 test-net 网络。

sh 复制代码
docker run -itd --name test1 --network test-net ubuntu /bin/bash

再运行一个容器并加入到 test-net 网络。

sh 复制代码
docker run -itd --name test2 --network test-net ubuntu /bin/bash

通过 ping 来验证 test1 容器和 test2 容器建立了互联关系。

sh 复制代码
docker exec -it test1 /bin/bash
ping test2

同样,可以在 test2 容器中验证与 test1 的连接。

配置 DNS

在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

json 复制代码
{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

设置后,需要重启 Docker 才能生效。

使用以下命令查看容器的 DNS 是否生效:

sh 复制代码
docker run -it --rm  ubuntu cat /etc/resolv.conf

手动指定容器的 DNS 配置

如果只想在指定的容器设置 DNS,可以使用以下命令:

sh 复制代码
docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

参数说明:

  • --rm:容器退出时自动清理容器内部的文件系统。
  • -h--hostname:设定容器的主机名。
  • --dns:添加 DNS 服务器到容器的 /etc/resolv.conf 中。
  • --dns-search:设定容器的搜索域。

如果在容器启动时没有指定 --dns--dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。

相关推荐
草莓熊Lotso1 分钟前
MySQL 事务管理全解:从 ACID 特性、隔离级别到 MVCC 底层原理
linux·运维·服务器·c语言·数据库·c++·mysql
斯普信云原生组8 分钟前
Docker 开源软件应急处理方案及操作手册——Docker 服务启动故障处理
运维·docker·容器
斯普信云原生组13 分钟前
Docker 开源软件应急处理方案及操作手册——存储卷与数据持久化问题
docker·容器·eureka
斯普信云原生组13 分钟前
Docker 开源软件应急处理方案及操作手册——Docker Compose 应急处理
docker·容器·eureka
文静小土豆21 分钟前
Harbor容器化部署
docker·kubernetes
Traving Yu25 分钟前
Kubernetes(K8s)
云原生·容器·kubernetes
不愿透露姓名的大鹏25 分钟前
MySQL InnoDB核心参数深度优化/性能调优
运维·服务器·数据库·mysql
独隅27 分钟前
在 Linux 上部署 Keras 模型的全面指南
linux·运维·keras
运维有小邓@28 分钟前
如何检测 Active Directory 中的身份与访问风险?
大数据·运维·网络
hanzhuhuaa30 分钟前
golang工程部署到docker容器(三)
运维·docker·容器