如何使用Docker暴露多个端口?

nub*_*ela 404 docker docker-networking

所以我有3个端口应该暴露在机器的界面上.是否可以使用Docker容器执行此操作?

Tan*_*Ang 639

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

docker run -p <host_port>:<container_port>
Run Code Online (Sandbox Code Playgroud)

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

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Run Code Online (Sandbox Code Playgroud)

  • @GiovanniBitliner我还是很新,但我很确定你会用[EXPOSE](https://docs.docker.com/reference/run/#expose-incoming-ports)在Dockerfile中定义端口,然后执行`docker run -P`(注意大写),它自动公开Dockerfile中用EXPOSE定义的所有端口 (8认同)
  • 谢谢!在这里的文档中找到了这个:http://docs.docker.com/userguide/dockerlinks/#network-port-mapping-refresher里面写着`注意:-p标志可以多次使用来配置多个端口. (4认同)
  • 我认为这里的正确术语是“发布”而不是“公开”。 (3认同)

mai*_*mer 250

步骤1

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

EXPOSE 3000 80 443 22
Run Code Online (Sandbox Code Playgroud)

第2步

然后,您想基于上面构建一个新图像Dockerfile.
例如

docker build -t foo:tag .
Run Code Online (Sandbox Code Playgroud)

第三步:

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

docker run -p 3001:3000 -p 23:22
Run Code Online (Sandbox Code Playgroud)

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

docker run -it -p 7100-7120:7100-7120/tcp 
Run Code Online (Sandbox Code Playgroud)

  • EXPOSE仅是已发布且仅用于链接的端口的文档.可以使用-P找到完整的端口列表,它们将自动映射到主机上的可用端口. (14认同)
  • 不需要暴露.删除第一步或使其可选. (4认同)

Ras*_*lam 25

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

services:
    varnish:
        ports:
            - 80
            - 6081
Run Code Online (Sandbox Code Playgroud)

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

varnish:
    ports:
        - 80:80
        - 6081:6081
Run Code Online (Sandbox Code Playgroud)

  • 当您仅指定一个数字(例如“80”,而不是“80:80”)时,“docker”会将指定的容器端口映射到临时范围内的主机端口。 (2认同)

Ara*_*NSR 5

以此为例:

docker create --name new_ubuntu -it -p 8080:8080 -p  15672:15672 -p 5432:5432   ubuntu:latest bash
Run Code Online (Sandbox Code Playgroud)

查看您创建的内容(并复制其容器 ID xxxxx):

docker ps -a 
Run Code Online (Sandbox Code Playgroud)

现在写下奇迹创造者的话(开始):

docker start xxxxx
Run Code Online (Sandbox Code Playgroud)

祝你好运


小智 5

仅补充一点。您可以选择指定要在 dockerfile 中以及运行时公开的端口范围:

在 dockerfile 上:

EXPOSE 8888-8898
Run Code Online (Sandbox Code Playgroud)

构建镜像:

docker build -t <image_name>:<version> -f dockerfile .
Run Code Online (Sandbox Code Playgroud)

运行镜像时:

docker run -it -p 8888-8898:8888-8898 -v C:\x\x\x:/app <image_name>:<version>
Run Code Online (Sandbox Code Playgroud)