docker动态绑定端口

一、背景

在创建容器的时候,我们可以使用命令 docker container run -p host:container container-name 的方式来绑定端口,还可以使用docker-compose.yml文件来绑定端口。有时会有一个需求:在已经创建的容器上添加容器端口与主机端口的绑定,这时可以使用iptables命令来动态绑定端口,而不用重新创建容器。

二、使用iptables动态绑定端口

1、查看容器ip

docker inspect <container-name | id> | grep IPAddress

这一步后会输出容器的ip地址,端口绑定时会使用。

2、端口绑定

sudo iptables -t nat -A PREROUTING  -p tcp -m tcp --dport hostport -j DNAT --to-destination  containerip:port

举个例子,使用命令

sudo iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 9030 -j DNAT --to-destination  172.22.0.2:9090

将容器的9090端口和宿主机的9030端口绑定了起来,其中172.22.0.2是容器的ip地址。

3、保存规则

sudo iptables-save

4、查看动态绑定的端口

 docker port <container-name | id> 不能查看使用iptables绑定的端口,要使用命令 iptables -t nat -nvL | grep container-ip 来查看。

转载于:https://www.cnblogs.com/sench/p/8798353.html

docker-compose中绑定端口到127.0.0.1(即localhost)可以通过在`docker-compose.yml`文件中使用`ports`字段来实现。具体来说,你需要在`ports`字段中指定主机端口和容器端口,并使用`127.0.0.1:主机端口:容器端口`的格式。 以下是一个示例`docker-compose.yml`文件,展示了如何将容器的端口绑定到主机的127.0.0.1: ```yaml version: '3' services: web: image: nginx ports: - "127.0.0.1:8080:80" ``` 在这个示例中,`nginx`容器的端口80被绑定到主机的端口8080,并且只能通过127.0.0.1:8080访问。 ### 详细步骤: 1. **创建`docker-compose.yml`文件**:在你的项目目录中创建一个名为`docker-compose.yml`的文件。 2. **编写服务配置**:在文件中定义你的服务。例如,上述示例中定义了一个名为`web`的服务,使用`nginx`镜像。 3. **绑定端口**:在`ports`字段中指定主机端口和容器端口,并使用`127.0.0.1:主机端口:容器端口`的格式。例如,`"127.0.0.1:8080:80"`表示将主机的8080端口绑定到容器的80端口,并且只能通过127.0.0.1:8080访问。 4. **启动服务**:在终端中导航到包含`docker-compose.yml`文件的目录,运行以下命令启动服务: ```sh docker-compose up -d ``` ### 注意事项: - 确保你的主机端口没有被其他服务占用。 - 使用`127.0.0.1`可以限制访问只能通过本地主机进行,提高安全性。 通过这种方式,你可以将Docker容器的端口绑定到主机的特定IP地址,从而控制访问权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值