我正在尝试运行詹金斯容器。我使用了“ docker run-永远重启–name myjenkins -p 8080:80 jenkins”,但无法在浏览器上的http://localhost:8080上访问jenkins。如果我使用docker run --restart always --name myjenkins -p 8080:8080 jenkins,则可以访问jenkins网址。
预先感谢
答案 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应用程序:
例如,因为 APP_B 中的 8080 仅在 APP_B 容器内可见。没有机构可以访问此应用程序。
为了访问您的Docker应用程序,您必须明确建立以下两者之间的关系:
容器端口内部的Linux主机端口<->
。
为此,您可以使用 -p 参数
此后,您可以使用其新端口访问Docker应用程序:
在docker run中发布8080:80和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
之间的所有流量路由。