容器运行时

Posted L&P Essay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器运行时相关的知识,希望对你有一定的参考价值。

1. 容器运行时

定义: 容器本身就是一个进程,那么在方便用户对其进行管理的软件就是容器运行时。

  1. 比较火的容器运行时就是Docker,之后又增加了containerd、runc等组件。

  2. 图1

  3. 当收到创建容器的指令之后,会由docker-daemon->containerd->containerd-shim->runC创建,runC创建完之后就会退出。

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

【中文标题】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 容器 [重复]

浅析容器运行时奥秘——OCI标准

在 Kubeflow 中运行自定义容器时,如何将参数传递给容器?

如何查看Docker容器运行时使用的本地存储位置