欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker 端口映射

程序员文章站 2022-06-04 20:03:17
...

本文使用示例基于nginx镜像。首先我们从镜像仓库下载:

docker pull hub.c.163.com/public/nginx:1.2.1

然后启动一个nginx容器:

docker run -d --name nginx-test hub.c.163.com/public/nginx:1.2.1 /bin/sh -c "while true; do sleep 3600;done"

启动名为nginx-test的nginx容器。
执行:docker network ls结果如下:

NETWORK ID          NAME                DRIVER              SCOPE
dce12ad15e67        bridge              bridge              local
be63d9693f78        host                host                local
ec80468730b6        my-bridge           bridge              local
d1c04eee03c8        none                null                local

由之前讲的可以知道我们可以通过docker network inspect dce12ad15e67命令来查看默认连接到bridge上的nginx-test容器的ip地址:

"Containers": {
            {
            "c08c178f374d13bd6f37a5781c067acfc981a3ea3df0ee0689bd4ef54054d3fb": {
                "Name": "ngnix-test",
                "EndpointID": "c5c92988a73b4884b0c3adac1342821c9954fcdb6fefc51a8347560aaa2db4e1",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        }

可知nginx容器的ip地址为172.17.0.2,16是掩码。
由于nginx是一个web服务器,启动nginx后可以直接访问它的ip地址后有一个欢迎页面。我们在宿主机上可以执行curl命令来访问:

[[email protected] ~]$ curl http://172.17.0.2
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

现在问题在于只有docker所在环境的宿主机(此处为虚拟机)中才可以访问nginx服务,其默认端口为80端口,而有时候我们想在虚拟机外,如本地环境去访问这个nginx服务,此时就访问不了了。
为了解决这个问题,需要将nginx的80端口映射到本地127.0.0.1的80端口,这样我们在本地就可以访问到nginx服务了。
我们将原理的nginx容器stop和rm掉,重新启动一个nginx容器:

 docker run -d --name nginx-test -p 80:80 hub.c.163.com/public/nginx:1.2.1

其中-p命令就是将容器中的80端口映射到docker环境所在宿主机的80端口,此时我们直接在宿主机*问127.0.0.1就可以访问到nginx服务了:

[[email protected] ~]$ curl http://127.0.0.1
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

此处宿主机是是本地启动的虚拟机,如果部署到云上,那就相当于访问远程虚拟机的ip地址就可以访问到虚拟机上nginx容器的服务。