如何使用 Docker 公开 1 个以上的端口?

Posted

技术标签:

【中文标题】如何使用 Docker 公开 1 个以上的端口?【英文标题】:How can I expose more than 1 port with Docker? 【发布时间】:2014-01-17 15:56:33 【问题描述】:

所以我有 3 个端口应该暴露给机器的接口。是否可以使用 Docker 容器来做到这一点?

【问题讨论】:

可以重定向多个端口。见文档:docs.docker.io/en/latest/use/port_redirection 以上是死链接... 【参考方案1】:

以此为例:

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

祝你好运

【讨论】:

【参考方案2】:

如果你使用docker-compose.ymlfile:

services:
    varnish:
        ports:
            - 80
            - 6081

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

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

【讨论】:

当您只指定一个数字时(例如80,而不是80:80),docker 会将指定的容器端口映射到临时范围内的主机端口。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

步骤1

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

EXPOSE 3000 80 443 22

第二步

然后您想基于上述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 

【讨论】:

EXPOSE 只是已发布端口的文档,仅对链接有用。使用 -P 可以找到完整的端口列表,它们将自动映射到主机上的可用端口。 不需要公开。删除第一步或将其设为可选。【参考方案5】:

要只公开一个端口,您需要这样做:

docker run -p <host_port>:<container_port>

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

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

【讨论】:

谢谢!在这里的文档中找到了这个:docs.docker.com/userguide/dockerlinks/… 上面写着Note: The -p flag can be used multiple times to configure multiple ports. 有没有办法在配置文件中指定端口?例如使用选项--env-file ? @GiovanniBitliner 我对此还是很陌生,但我很确定你会在 Dockerfile 中用EXPOSE 定义端口,然后执行docker run -P(注意大写),它会自动暴露Dockerfile 中使用 EXPOSE 定义的所有端口 多个端口可以在systemd服务文件下停止init进程? 我认为这里的正确术语是publish 而不是expose

以上是关于如何使用 Docker 公开 1 个以上的端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将 Docker 容器端口公开给 localhost,以便也可以通过 ssh 隧道访问它?

如何使用 Azure Web 应用容器公开端口 3000?

AWS Docker 部署不使用 Dockerrun 文件向外界公开端口

Docker-端口映射

AWS BeansTalk 公开 docker 端口

如何在 docker 文件中发布端口