【发布时间】:2016-10-14 23:43:15
【问题描述】:
我有一种情况,我需要在这个 jenkins 容器中启动一些服务以使其在我们的项目中工作。所以我需要启用 Systemd 才能做到这一点......
截至目前,当我尝试在此容器中运行“systemctl”命令时出现以下错误:
获取 D-Bus 连接失败:不允许操作
这是预期的。 现在在我的研究中,我发现如果我们使用下面的 docker 文件创建一个镜像然后运行一个容器,我们应该能够运行 systemctl 命令:
FROM docker.io/openshift/jenkins-1-centos7
MAINTAINER "you" your@email.here
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/;\
rm -f /etc/systemd/system/.wants/;\
rm -f /lib/systemd/system/local-fs.target.wants/; \
rm -f /lib/systemd/system/sockets.target.wants/udev; \
rm -f /lib/systemd/system/sockets.target.wants/initctl; \
rm -f /lib/systemd/system/basic.target.wants/;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
我收到以下错误
/bin/sh: line 0: [: cryptsetup.target: unary operator expected
rm: cannot remove 'cryptsetup.target': Permission denied
/bin/sh: line 0: [: dev-hugepages.mount: unary operator expected
rm: cannot remove 'dev-hugepages.mount': Permission denied
/bin/sh: line 0: [: dev-mqueue.mount: unary operator expected
rm: cannot remove 'dev-mqueue.mount': Permission denied
...
我正在使用root用户运行命令。
不过,如果我将源图像替换为普通的 centos 图像
来自 centos:7
这个新创建的镜像(基于 centos)的 systemd 工作正常。
这个错误有什么原因吗?或者我不能在给定的 jenkins-1-centos7 图像之上创建一个 systemd 类型的图像?
编辑: 好的,所以一位专家帮助我理解了“默认情况下,在 Dockerfile 中,您以 root 身份运行命令,直到您使用 USER 指令明确更改用户。但是,由于您正在构建我相信您是以 Jenkins 用户而不是 root 用户身份运行命令的图像。如果您明确切换回 root,那么您可以运行命令。"
所以新文件看起来像这样:
FROM docker.io/openshift/jenkins-1-centos7
MAINTAINER "you" your@email.here
#ENV container docker
USER root
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -rf /lib/systemd/system/multi-user.target.wants/;\
rm -rf /etc/systemd/system/.wants/;\
rm -rf /lib/systemd/system/local-fs.target.wants/; \
rm -rf /lib/systemd/system/sockets.target.wants/udev; \
rm -rf /lib/systemd/system/sockets.target.wants/initctl; \
rm -rf /lib/systemd/system/basic.target.wants/;\
rm -rf /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
有效!! 但是现在,jenkins 服务没有开始返回以下错误: bash-4.2# systemctl status jenkins.service ● jenkins.service - LSB:Jenkins 持续集成服务器 加载:加载(/etc/rc.d/init.d/jenkins) 活动:自 2016 年 10 月 18 日星期二 19:45:17 UTC 以来失败(结果:退出代码); 5 秒前 文档:man:systemd-sysv-generator(8) 进程:95 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)
Oct 18 19:45:17 578908315d82 systemd[1]: Starting LSB: Jenkins Continuous Integration Server...
Oct 18 19:45:17 578908315d82 jenkins[95]: /etc/rc.d/init.d/jenkins: line 51: /etc/init.d/functions: No such file or directory
Oct 18 19:45:17 578908315d82 systemd[1]: jenkins.service: control process exited, code=exited status=1
Oct 18 19:45:17 578908315d82 systemd[1]: Failed to start LSB: Jenkins Continuous Integration Server.
Oct 18 19:45:17 578908315d82 systemd[1]: Unit jenkins.service entered failed state.
Oct 18 19:45:17 578908315d82 systemd[1]: jenkins.service failed.
目前仍在研究这个...
EDIT2: 所以我在某个时候解决了这个问题,因为我决定使用一个单独的容器来运行其他所有东西,而这个 jenkins 容器保持原样......
【问题讨论】:
标签: docker dockerfile openshift-origin