Docker 容器在手动运行容器时可由 localhost 访问,但在由 jenkinsfile 运行时无法访问

Posted

技术标签:

【中文标题】Docker 容器在手动运行容器时可由 localhost 访问,但在由 jenkinsfile 运行时无法访问【英文标题】:Docker container accessible to localhost when container is runned manually but not when runned by a jenkinsfile 【发布时间】:2021-12-10 00:33:38 【问题描述】:

我在 PORT:8084 上暴露的容器上运行 Spring Boot 应用程序。 图像被推送到 docker hub 然后我在 Jenkinsfile 上有这个脚本,它在容器上运行图像:

stage('Deploying the image into a container')
        steps 
            echo "Installing the app "
            sh 'docker run $imagename:$BUILD_NUMBER -p 8084:8084 -d --name $dockerImage  '
        
    

在 'localhost:8084' 上无法访问应用程序,容器已启动并且在运行时 docker-ps

33f8cb4d98e6   28609002/time_sheet_dev_ops:38   "java -jar time_shee…"   29 minutes ago   Up 3 seconds   8084/tcp   focused_merkle

但是当我在终端中手动运行图像时,可以访问该应用程序:

docker run -d -p 8084:8084 imagename

运行docker ps时:

50715adaa50c   28609002/time_sheet_dev_ops:latest   "java -jar time_shee…"   8 seconds ago   Up 7 seconds   0.0.0.0:8084->8084/tcp, :::8084->8084/tcp   distracted_shamir

唯一的区别在于端口输出,我尝试在运行命令中添加-b 0.0.0.0,还尝试通过“127.0.0.1:8084”和许多其他解决方案访问应用程序,但似乎没有任何东西可以使它在 CI/ 中工作CD流水线

【问题讨论】:

【参考方案1】:

尝试run 之后和image 之前的选项。

这里是docker run --help 输出:

 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

所以,正确的命令:

sh 'docker run -p 8084:8084 -d --name $dockerImage $imagename:$BUILD_NUMBER'

【讨论】:

以上是关于Docker 容器在手动运行容器时可由 localhost 访问,但在由 jenkinsfile 运行时无法访问的主要内容,如果未能解决你的问题,请参考以下文章

docker教程系列二

如何在 docker 中以非 root 用户身份写入卷容器?

Docker镜像制作和管理

tomcat docker容器在停止tomcat服务器后停止并退出

docker-compose 在主机重启后启动容器。哪个?

前端应用容器化部署 Docker