如何使用Docker公开超过1个端口?

我有3个端口应该暴露在机器的接口上。Docker容器能做到这一点吗?

475647 次浏览

为了只公开一个端口,你需要这样做:

docker run -p <host_port>:<container_port>

要公开多个端口,只需提供多个-p参数:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>

Step1

Dockerfile中,您可以使用动词EXPOSE来公开多个端口 例如< / p >
EXPOSE 3000 80 443 22

步骤2

然后你想要建立一个基于上面Dockerfile的新图像 例如< / p >
docker build -t foo:tag .

步骤3

则可以使用-p将主机端口与容器端口进行映射,如上文Dockerfile中的EXPOSE所定义 例如< / p >

docker run -p 3001:3000 -p 23:22

如果你想公开一系列连续的端口,你可以像这样运行docker:

docker run -it -p 7100-7120:7100-7120/tcp

如果你使用docker-compose.ymlfile:

services:
varnish:
ports:
- 80
- 6081

您还可以将主机/网络端口指定为HOST/NETWORK_PORT:CONTAINER_PORT

varnish:
ports:
- 81:80
- 6081:6081

如果你从一个镜像创建一个容器,并且喜欢公开多个端口(而不是发布),你可以使用下面的命令:

docker create --name `container name` --expose 7000 --expose 7001 `image name`

现在,当您使用docker start命令启动这个容器时,上面配置的端口将会暴露出来。

举个例子:

docker create --name new_ubuntu -it -p 8080:8080 -p  15672:15672 -p 5432:5432   ubuntu:latest bash

看看你创建的东西(复制它的CONTAINER ID xxxxx):

docker ps -a

现在写下创造奇迹的单词(开始):

docker start xxxxx

祝你好运

只有一点需要添加。你可以选择在dockerfile和运行它时指定端口范围来公开:

dockerfile:

EXPOSE 8888-8898

构建图像:

docker build -t <image_name>:<version> -f dockerfile .

运行映像时:

docker run -it -p 8888-8898:8888-8898 -v C:\x\x\x:/app <image_name>:<version>