我正在尝试运行jenkins容器。我使用了"docker run --restart always --name myjenkins -p 8080:80 jenkins“,但无法在浏览器上访问http://localhost:8080上的jenkins。如果我使用docker run --restart always --name myjenkins -p 8080:8080 jenkins,我可以访问jenkins url。
提前感谢
发布于 2018-09-07 07:09:21
没有Docker
- APP\_A : 192.168.4.5:8080
- APP\_B : 10.10.10.15:8081
- APP\_C : [www.app.com:8082](http://www.app.com:8082/)
使用Docker
- APP\_A : 192.168.4.5:8080
- APP\_B : 10.10.10.15:8080
- APP\_C : [www.app.com:8080](http://www.app.com:8080/)
因为例如,APP_B的8080仅在APP_B容器内可见。任何人都无法访问此应用程序。
为了访问docker应用程序,您必须明确地在以下各项之间建立关系:
Linux主机端口<->
内部容器端口。
为此,您可以使用-p参数
H141运行-d -p 8082:E142 8080 APP_C ...H244
在此之后,您可以使用其新端口访问docker应用程序:
使用docker-compose和docker网络时的一个常见错误是,当一个docker应用程序需要连接到另一个docker应用程序时,使用本地主机而不是ip。如您所见,您需要使用localhost:8080代替ip或域+外部端口
在docker运行中发布8080:80和8080:8080有什么区别?
您只需研究jenkins使用的内部容器端口,并将其放入docker run -p ...中
发布于 2018-09-05 04:20:41
8080:80是指在容器中使用端口80,并将该端口转发到主机的8080端口。因此,在场景2中,您在容器内的端口80上运行Jenkins,在容器内的端口8080上运行Jenkins,并在主机上的同一端口上公开它。例如,如果我在容器中运行mysql,我可能会使用8080:3306,所以mysql将运行在端口3306上,但暴露在主机的8080上,但如果选择8080:80作为mysql,它可能无法工作,因为根据mysql的代码,它将自己绑定在端口3306上,而不是端口80上。Jenkins的情况也是如此。
发布于 2018-09-05 04:25:39
当您说8080:80时,这意味着任何来自端口8080的请求都将被转发到您的docker容器内运行在端口80上的服务。类似地,8080:8080意味着任何来自端口8080的请求都将被转发到容器内运行在端口8080上的服务
你也可以把它想象成-
Port for Outside World: Actual Port of service in container
希望这能有所帮助
https://stackoverflow.com/questions/52173352
复制相似问题