如何使用 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.yml
file:
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
将主机端口映射到容器端口,如上面EXPOSE
的Dockerfile
中定义的那样。
例如
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 隧道访问它?