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

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

【问题讨论】:

标签: docker docker-networking


【解决方案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
      猜你喜欢
      • 2021-11-16
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 2021-02-12
      相关资源
      最近更新 更多