在Docker实战中,要让外部主机能够访问到运行在Docker容器内的服务,需要进行端口映射。以下是实现外部访问容器内服务的步骤:
端口映射
-
使用
-p
或-P
参数启动容器:-
使用
-p host_port:container_port
映射指定的宿主机端口到容器端口。例如,将宿主机的8080端口映射到容器的80端口(假设NGINX正在容器的80端口提供服务):docker run -d -p 8080:80 nginx
-
如果使用
-P
(大写),Docker会随机映射一个宿主机端口到容器开放的网络端口,适合于动态分配端口的情况。
-
-
查看端口映射情况:
使用docker ps
命令查看运行中的容器以及其端口映射信息,或者使用docker port container_name_or_id
查看具体某个容器的端口映射详情。 -
外部访问:
容器内部的服务通过端口映射后,外部主机可以直接通过映射后的宿主机IP和端口访问该服务。例如,若宿主机IP为192.168.1.100
,且已将宿主机的8080端口映射至容器的80端口,则可以在浏览器或其他客户端上输入http://192.168.1.100:8080
来访问容器内的Web服务器。
注意事项:
- 如果是生产环境或局域网外部访问,可能还需要配置防火墙规则以允许外部流量到达指定的宿主机端口。
- 对于云服务商提供的实例,如阿里云、AWS等,还需确保安全组规则允许相应的入站流量。
- 在某些场景下,如容器位于虚拟机或私有云内部,可能需要设置路由规则或NAT转换来使外部网络能够访问到宿主机。
Docker Compose 中的端口映射
在使用Docker Compose时,在 docker-compose.yml
文件中指定服务端口映射:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
这样,当执行 docker-compose up
启动服务时,容器内的80端口会被自动映射到宿主机的8080端口。