【问题标题】:run docker commands from command prompt versus jenkins script从命令提示符与 jenkins 脚本运行 docker 命令
【发布时间】:2016-01-15 23:41:02
【问题描述】:

我有一个安装了 docker-machine 的测试 Ubuntu 服务器。我在服务器上运行了许多 docker 容器。包括一个 Jenkins 容器。我使用以下命令运行 jenkins

docker run -d --name jenkins -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --restart=always -p 8080:8080 -v ~/jenkinsHome:/var/jenkins_home docker-jenkins

我正在通过 Jenkins 管理我的图像。我可以通过 Jenkins shell 脚本启动除一个容器之外的所有容器。失败的一个容器似乎在脚本中启动(我在 docker run in script 之后做了一个 docker PS)。但是,容器会在脚本完成后停止。我正在使用与命令提示符相同的 docker run 命令,但它在 Jenkins 脚本中失败:

sudo docker run -d --net=host -v ~/plex-config:/config -v ~/Media:/media -p 32400:32400 wernight/plex-media-server

我已经仔细检查了文件夹权限并且它们是正确的。谁能告诉我运行命令在 Jenkins 中失败的可能原因,但不是在命令提示符下?

【问题讨论】:

  • 附带说明:当您还使用--net=host 时,使用-p 32400:32400 毫无意义。使用--net=host时,容器上打开的所有端口都会在docker主机上打开
  • 你能分享一下 docker logs 在 jenkins 中启动失败的容器的输出吗?
  • docker slave运行的使用账号是什么?它是否具有正确的 sudo 权限?其他环境参数有什么不同吗?
  • @Thomasleveil 我如何获得这些日志?容器在我可以执行之前停止?并感谢有关端口的说明。我只是按照图像开发者提供的说明进行操作。
  • docker ps -a 列出所有容器,包括停止的容器。然后docker logs <id of stopped container>

标签: jenkins docker


【解决方案1】:

使用docker ps =a 我能够获得已停止容器的 ID。然后通过使用docker logs 我能够看到错误是文件夹权限问题。然后深入挖掘,这是用户 Jenkins 运行之间的用户权限错误不匹配,因为它的容器内部无法正确传递文件夹。我决定通过使用 docker stop 和 start 命令而不是使用 docker run 命令来规避这个问题。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2017-03-10
    • 1970-01-01
    • 2019-06-11
    • 2015-10-01
    • 2010-11-30
    • 2014-03-18
    相关资源
    最近更新 更多