【发布时间】:2014-01-17 15:56:33
【问题描述】:
所以我有 3 个端口应该暴露给机器的接口。是否可以使用 Docker 容器来做到这一点?
【问题讨论】:
-
可以重定向多个端口。见文档:docs.docker.io/en/latest/use/port_redirection
-
以上是死链接...
所以我有 3 个端口应该暴露给机器的接口。是否可以使用 Docker 容器来做到这一点?
【问题讨论】:
以此为例:
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
祝你好运
【讨论】:
如果你使用docker-compose.ymlfile:
services:
varnish:
ports:
- 80
- 6081
您也可以将主机/网络端口指定为HOST/NETWORK_PORT:CONTAINER_PORT
varnish:
ports:
- 81:80
- 6081:6081
【讨论】:
80,而不是80:80),docker 会将指定的容器端口映射到临时范围内的主机端口。
如果你从一个镜像创建一个容器并且喜欢暴露多个端口(不是发布)你可以使用下面的命令:
docker create --name `container name` --expose 7000 --expose 7001 `image name`
现在,当你使用docker start 命令启动这个容器时,上面配置的端口就会暴露出来。
【讨论】:
在您的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
【讨论】:
要只公开一个端口,您需要这样做:
docker run -p <host_port>:<container_port>
要公开多个端口,只需提供多个-p 参数:
docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
【讨论】:
Note: The -p flag can be used multiple times to configure multiple ports.
--env-file ?
docker run -P(注意大写),它会自动暴露Dockerfile 中使用 EXPOSE 定义的所有端口
publish 而不是expose。