📅  最后修改于: 2023-12-03 15:00:30.626000             🧑  作者: Mango
在 Docker 中,管理容器端口是非常重要的一件事情,因为端口对于一些服务的访问是必不可少的。
我们可以使用 docker ps
命令来查看正在运行的容器列表,该命令会展示以下列出每个容器对外提供的端口:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5e4...a569 myimage:latest "/app/my…" 20 hours ago Up 20 hours 0.0.0.0:8080->80/tcp mycontainer
在这里,我们可以看到容器的 ID 为 b5e4...a569 ,它对外提供的端口为 8080 ,将来我们就可以用 IP 地址加端口号的方式来访问容器。
Dockerfile 中的 EXPOSE 指令用于定义在运行时要在容器内听取的端口。它没有实际上将端口打开或映射到宿主机上,只是文档的作用。
例如,在 Dockerfile 中编写以下 EXPOSE 指令:
EXPOSE 8080
这意味着,我们在运行容器时,要使用 -p
选项来将容器内的端口映射到宿主机上:
$ docker run -p 80:8080 myimage
这里将容器内 8080 端口映射到了宿主机的 80 端口上,这样我们就可以通过浏览器访问容器:
http://localhost
Docker run 命令中的 -p 选项用于将容器内部的端口暴露给宿主机,其格式为:
$ docker run -p [宿主机端口]:[容器端口] [IMAGE]
例如:
$ docker run -p 8080:80 myimage
这里将容器内的 80 端口映射为宿主机的 8080 端口。
我们还可以启动容器并将其绑定到所有可用接口上,例如:
$ docker run -p 0.0.0.0:8080:80 myimage
在此配置中,除了宿主机 127.0.0.1 IP 以外,容器的 80 端口还绑定到了宿主机上的所有可用接口。这样就可以通过任何有公网 IP 地址的设备上的浏览器访问容器。
我们还可以使用 Docker Compose 来管理多个容器并自动进行端口映射。
在以下的示例中,我们在 docker-compose.yml
文件中定义了两个容器: myapp
和 mydb
。这两个容器相互连接,并将 myapp
容器的 80 端口映射到宿主机的 8080 端口上:
version: '3'
services:
myapp:
image: myimage
ports:
- "8080:80"
links:
- mydb
mydb:
image: mydb
要启动多个容器,只需使用以下命令:
$ docker-compose up -d
使用 -d
参数可以将容器以后台方式运行。
在 Docker 中,我们可以使用 docker ps
查看所有正在运行的容器的端口,并使用 -p
选项将容器内部的端口映射到宿主机上。我们还可以使用 Docker Compose 来管理多个容器并自动进行端口映射。