问题描述
docker上面运行容器,run -p 的时候只映射了一个端口,后面对该nginx做扩展,需要开放其他端口。当然重新再启一个容器在docker启动参数里多配置几个-p端口映射是能解决的,但是如果自己不想重新启一个容器,试试下面两种方式
解决方法
方法一:
1.获取容器ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器id
2.利用iptable转发,将容器的端口80映射到docker主机的端口8081
iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:80
方法二:
1.docker ps命令找到容器的id
2.将该容器设为自启动
docker update 容器id --restart=always
3.用命令docker inspect 6fe599270a48 | grep HostsPath找到nginx容器端口配置文件地址
[root@VM-0-6-centos 123]# docker inspect 6fe599270a48 | grep HostsPath
"HostsPath": "/var/lib/docker/containers/6fe599270a482e0bf6b3c9a38a8d6212f6f5339e65b7bf32834ab9a5c6e81f9f/hosts",
4.进入配置文件路径
5.关闭docker容器
systemctl stop docker
注意:如果出现Warning: Stopping docker.service, but it can still be activated by:
docker.socket这样的错误,需要再执行一下systemctl stop docker.socket
6.修改hostconfig.json配置文件
vim hostconfig.json
添加我们需要的端口映射:
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "8081"
}
],
"8000/tcp": [
{
"HostIp": "",
"HostPort": "8000"
}
],
"9000/tcp": [
{
"HostIp": "",
"HostPort": "9000"
}
]
}
7.修改config.v2.json配置文件
同路径下打开config.v2.json,修改:
ExposedPorts和
Ports
"ExposedPorts": {
"80/tcp": {},
"8000/tcp": {},
"9000/tcp": {}
}
"Ports": {
"80/tcp": [{
"HostIp": "0.0.0.0",
"HostPort": "80"
}],
"8000/tcp": [{
"HostIp": "0.0.0.0",
"HostPort": "8000"
}],
"9000/tcp": [{
"HostIp": "0.0.0.0",
"HostPort": "9000"
}]
}
8.重启docker容器
systemctl start docker
版权归原作者 孵不出鸡的坏蛋 所有, 如有侵权,请联系我们删除。