在docker run中发布8080:80和8080:8080有什么区别?

时间:2018-09-04 20:09:36

标签: docker jenkins

我正在尝试运行詹金斯容器。我使用了“ docker run-永远重启–name myjenkins -p 8080:80 jenkins”,但无法在浏览器上的http://localhost:8080上访问jenkins。如果我使用docker run --restart always --name myjenkins -p 8080:8080 jenkins,则可以访问jenkins网址。

预先感谢

4 个答案:

答案 0 :(得分:1)

8080:80表示在容器中您正在使用端口80,并且您正在将该端口转发到主机的8080端口。因此,在方案2中的任何地方,您都在容器内的端口80上运行Jenkins,并且在容器内的端口8080上运行Jenkins,并将其暴露在主机的同一端口上。 例如,如果我在容器中运行mysql,我可能会使用8080:3306,所以mysql将在端口3306上运行,但在主机8080上公开,但是如果为mysql选择8080:80,则它可能无法工作,因为按照代码的mysql本身绑定在端口3306而不是端口80上。在您的Jenkins情况下也是如此。

答案 1 :(得分:0)

当您说8080:80时,这意味着来自端口8080的任何请求都将转发到docker容器内端口80上运行的服务。 同样,8080:8080意味着对端口8080的任何请求都将转发到容器内端口8080上运行的服务

您也可以将其视为-

 Port for Outside World: Actual Port of service in container

希望这会有所帮助

答案 2 :(得分:0)

没有Docker(Linux工匠)

image1

  • 每个应用程序必须使用不同的端口。
  • 您可以直接使用其端口访问应用程序(当然,如果可用):

    • APP_A:192.168.4.5:8080
    • APP_B:10.10.10.15:8081
    • APP_C:www.app.com:8082

使用Docker(Linux ninja)

enter image description here

  • 应用程序可以使用任何端口,因为每个端口都是“ 是一个不同的世界
  • 无法使用其内部端口访问您的Docker应用程序:

    • APP_A:192.168.4.5:8080
    • APP_B:10.10.10.15:8080
    • APP_C:www.app.com:8080

例如,因为 APP_B 中的 8080 仅在 APP_B 容器内可见。没有机构可以访问此应用程序。

为了访问您的Docker应用程序,您必须明确建立以下两者之间的关系:

容器端口内部的Linux主机端口<->

enter image description here

为此,您可以使用 -p 参数

  • docker run -d -p 8080: 8080 APP_A ...
  • docker run -d -p 8080: 8081 APP_B ...
  • docker run -d -p 8080: 8082 APP_C ...

此后,您可以使用其新端口访问Docker应用程序:

  • APP_A:192.168.4.5:8080
  • APP_B:10.10.10.15:8081
  • APP_C:www.app.com:8082

  

在docker run中发布8080:80和8080:8080有什么区别?

  • 对于 8080:80 ,您希望应用程序使用容器内的 80 内部端口或从内部开始。
  • 对于 8080:8080 ,您希望应用程序使用或以容器内部的 8080 内部端口开头。

您只需要研究jenkins使用的内部容器端口,然后将其放入 docker run -p ...

答案 3 :(得分:0)

语法如下所示。关于-p标志的More details

docker run -p [ip-on-host:]port-on-host:port-in-container image-name

在您的情况下,-p 8080:80意味着将所有流量引向容器中的端口80。如果您通过netstat -lntp|grep 8080检查主机上的端口状态,则有一个由docker-proxy管理的进程正在监听主机上的端口8080。它将管理主机上端口8080与容器中端口80之间的所有流量路由。