如何使用Docker公开多个端口?


Answers:


714

要只暴露一个端口,这是您需要做的:

docker run -p <host_port>:<container_port>

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

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

4
谢谢!在以下文档中找到了此文件:docs.docker.com/userguide/dockerlinks/…上面写着Note: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young

有没有办法在配置文件中指定端口?例如使用选项--env-file
Giovanni Bitliner

8
@GiovanniBitliner我对此还很陌生,但是我敢肯定,您将使用EXPOSE在Dockerfile中定义端口,然后执行docker run -P(请注意大写)以自动公开Dockerfile中用EXPOSE定义的所有端口
Ted Avery

多个端口可以暂停systemd服务文件下的初始化进程?
兰蒂

1
我认为这里的正确术语publish不是expose
tgogos

289

步骤1

在中Dockerfile,您可以使用动词EXPOSE公开多个端口。
例如

EXPOSE 3000 80 443 22

第2步

然后,您想基于来构建新图像Dockerfile
例如

docker build -t foo:tag .

第三步

然后可以使用-p映射主机端口与所述容器端口,如在上面所定义EXPOSEDockerfile
例如

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

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

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

17
EXPOSE仅是发布的端口的文档,仅对链接有用。使用-P可以找到端口的完整列表,它们将自动映射到主机上的可用端口。
阿伦·古普塔

4
不需要公开。删除第一步或使其成为可选步骤。
阿米尔·侯赛因(AmirHossein)

27

如果使用docker-compose.yml文件:

services:
    varnish:
        ports:
            - 80
            - 6081

您还可以指定主机/网络端口

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

0

如果要通过映像创建容器,并且希望公开多个端口(而不是发布),则可以使用以下命令:

container namedocker 创建--name --expose 7000 --expose 7001image name

现在,当您使用docker start命令启动此容器时,上面配置的端口将公开。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.