Docker两容器使用同一端口

不同的容器映射到同一个端口

操作步骤:
1、创建两个Docker容器

# 创建容器1
docker run -dit --name container1 <image>

# 创建容器2
docker run -dit --name container2 <image>

2、创建一个Docker网络

# 创建Docker网络
docker network create mynetwork

3、将容器连接到网络

# 连接容器1到网络
docker network connect mynetwork container1

# 连接容器2到网络
docker network connect mynetwork container2

4、设置端口映射

# 设置容器1的端口映射
docker run -dit --name container1 -p 8080:80 <image>

# 设置容器2的端口映射
docker run -dit --name container2 -p 8081:80 <image>

container1的容器端口80映射到主机的端口8080上,container2的容器端口80映射到主机的端口8081上。

现在,两个Docker容器就可以通过不同的端口访问了。

额外:

如果是将端口映射到本机

查看本机全部运行端口信息

netstat -ano

查看被占用端口的PID

netstat -aon|findstr "8081"

查看指定PID的进程

tasklist|findstr "9088"

结束进程

taskkill /T /F /PID 9088

### 如何在Docker中运行容器时配置和映射端口 #### 使用`docker run`命令进行端口映射 当通过 `docker run` 命令来启动一个新的容器实例时,可以利用 `-p` 或者 `--publish` 参数来进行主机到容器端口映射。此参数允许指定要公开的服务端口号以及它应该转发至哪个内部容器端口。 例如,如果想要把宿主机上的 8080 端口映射到正在创建的新容器内的 web 应用程序监听着的第 80 端口,则可以在执行 `docker run` 的时候加入如下选项: ```bash -p 8080:80 ``` 这表示任何发送给本地机器 IP 地址加上 8080 端口的数据包都会被重定向并传递给新启动的那个特定于该会话的容器里边处于侦听状态下的 HTTP 协议默认使用的 80 号端口[^1]。 对于多个端口的情况也可以一次性完成设置;只需重复上述语法即可。比如同时开放两个不同的外部访问路径分别对应同一应用的不同接口: ```bash docker run -d \ --name some-mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -p 3306:3306 \ -p 33060:33060 \ mysql/mysql-server:latest ``` 这段脚本不仅定义了一个名为 `some-d`) 运行起来,而且还设置了端口关联关系——即客户端可通过连接至物理机上相应位置处所对应的虚拟地址空间里的任意一处去请求资源,并由后者负责将消息转交给目标对象处理[^2]。 #### 动态调整已有容器端口映射 一旦某个容器已经开始运作之后再想去改变其原先设定好的对外展现形式并非易事,因为官方并不支持直接编辑现存实体的相关属性值。不过还是存在变通办法可循:一种较为常见的方式就是先停止当前版本的工作流程(`docker stop CONTAINER_ID/NAME`) ,接着删除旧版副本(`docker rm CONTAINER_ID/NAME`) 并依据更新后的配置文件重建新的替代品[^3]。 另外还有一种更为激进的方法适用于某些特殊场景下临时性的需求满足 —— 直接操作系统的防火墙规则集(Iptables),从而绕过常规机制达到目的。具体做法是在 NAT 表内新增一条记录指向所需变更的目标地址及其协议类型连同具体的传输层端口号组合而成的目的地信息。需要注意的是这种方法只适合短期测试用途而不建议长期部署生产环境当中使用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值