美文网首页
已开启的容器如何配置端口映射

已开启的容器如何配置端口映射

作者: 沿哲 | 来源:发表于2022-03-05 11:36 被阅读0次

如果在docker run命令里没有配置-p参数,后来又需要加上该怎么办?

方法一(尝试无效

有教程说编辑/var/lib/docker/containers/[容器ID]/下的文件修改
但是我尝试后不起作用==

方法二:配置IPTABLES

教程在此

前提
  1. 比如我的某个容器ip是172.16.0.2,在我的服务器上,想追加开放888端口
  2. 已经通过docker network create --subnet=172.16.0.0/16 mynetwork创建了子网,通过ifconfig查看得知mynetwork对应的网桥是br-e5d905c72d10
  3. 为了验证容器端口正确开放,需用另一台电脑(我的笔记本)进行测试
开始配置
iptables -A DOCKER ! -i br-e5d905c72d10 -o br-e5d905c72d10 -p tcp --dport 888 -d 172.16.0.2 -j ACCEPT
image
iptables -t nat -A POSTROUTING -p tcp --dport 888 -s 172.16.0.2 -d 172.16.0.2 -j MASQUERADE
image
iptables -t nat -A DOCKER ! -i br-e5d905c72d10 -p tcp --dport 888 -j DNAT --to-destination 172.16.0.2:888

测试888端口

我的笔记本和容器节点172.16.0.2通过socket进行聊天

# 服务器的容器节点上
import socket
fwq=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
fwq.bind(('0.0.0.0',888))
#监听5个连接
fwq.listen(5)
print('开始聊天!')
conn,addr=fwq.accept()  
while 1:
    #接收到的信息大小为1024字节
    client_msg=conn.recv(1024)
    #接收到的信息为编码的,在这里需要解码
    recvmsg=client_msg.decode('utf-8')
    #判断如果输入为“q”,则退出这个循环,关闭套接字
    if recvmsg=='q':
        break
    print('client msg:'+recvmsg)
    replymsg=input('reply:')
    conn.send(replymsg.encode('utf-8')) #发消息
#关闭第一个套接字
fwq.close()
#关闭新创建的套接字
conn.close()
# 我的笔记本
import socket
#创建一个套接字
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
'''连接这个地址和端口号,这个就像是打电话一样,这个是先
拨通电话号'''
client.connect(('容器节点所在主机的IP',888))
while 1:
    #输入你要发送的内容
    send_msg=input("你说:")
    #将发送过去的消息进行编码
    client.send(send_msg.encode('utf-8')) 
    #这个就是进行一个while循环结束的判断,不然就会成为死循环
    if send_msg=='q':
        break
    #将接收到的消息进行解码(最多能接收到的消息就1024个字节)
    back_msg=client.recv(1024).decode('utf-8')
    #打印出接收到的消息
    print(back_msg)
#关闭创建的套接字
client.close()

附iptables查看与删除命令

iptables -t nat -vnL POSTROUTING --line-number #查看

iptables -t nat -D POSTROUTING 6 #删除标号为6的规则

iptables -t nat -D DOCKER 6
iptables  -vnL DOCKER --line-number

iptables -D DOCKER 6

相关文章

  • 已开启的容器如何配置端口映射

    如果在docker run命令里没有配置-p参数,后来又需要加上该怎么办? 方法一(尝试无效 有教程[https:...

  • 如何在docker容器中开启两个端口映射

    如何在docker容器中开启两个端口映射 例如: dockerrun-d-it--nametest/home:/h...

  • docker配置nginx

    拉取nginx镜像 运行容器copy配置文件至本地 重新启动配置 -p 84:80 : 将容器的 80 端口映射...

  • Docker 小问题

    1. 更改端口映射,(例如,启动mysql是忘记配置端口映射) 方法1: 1.先停止容器 2.再停止docker ...

  • 端口映射

    设置容器端口映射 查看端口映射

  • Docker更改容器端口映射

    一般情况下是不可以改变容器的端口映射的,只有通过run命令指定。如果想要不改变容器内容和配置的情况下更改端口映射只...

  • Docker 部署MySQL

    搜索mysql镜像 拉取mysql镜像 创建容器,设置端口映射、目录映射 my.cnf配置utf8编码 创建容器 ...

  • Docker-端口映射

    Docker-端口映射 Docker端口映射 docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无...

  • docker

    docker 安装 国内远镜像加速配置 运行第一个容器 镜像相关命令 容器相关命令 容器的端口映射 设置一下ngi...

  • Docker常见镜像使用

    nginx 下载镜像 启动镜像 指定配置启动 全 目录说明: -p 8082:80: 将容器的 80 端口映射到主...

网友评论

      本文标题:已开启的容器如何配置端口映射

      本文链接:https://www.haomeiwen.com/subject/jqovrrtx.html