我正在用startKoin {
printLogger()
modules(applicationModule, repositoryModule)
}
构建image
,在我的docker文件中,我执行了一个脚本。在脚本中,有一些命令,例如:
docker file
当我执行systemctl start postgresql-9.6.service
systemctl disable NetworkManager
时,它会出错:
无法建立D-Bus连接:不允许操作
基于docker build
的图片。
我尝试使用支持systemd(solita/centos-systemd
)的基本centos映像,但是它不起作用。
有什么想法吗?
答案 0 :(得分:1)
将会话从评论移至答案:
克莱门斯:您好,zysaaa,您想要实现什么?仅在极少数情况下,建议通过docker内部的systemctl启动服务。请提供有关您的用例的其他信息
zysaaa :感谢您的评论,我是Docker的新手。我想在dockerfile中设置运行项目所需的环境,例如数据库的某些配置,启用sshd服务等等,在docker构建之后,我得到的映像将具有我需要的一切。这些操作不应该在dockerfile中执行吗?@ClemensKaserer
克莱门斯:不,^^。码头工人映像应具有单一用途,例如运行您的postgres数据库。这意味着在您的容器中,您只想运行该单个进程(postgres),而无需执行其他任何操作。因此,没有整个操作系统及其所有子进程。这是使容器技术如此强大的一个方面。您不需要运行整个操作系统,只需运行所需的过程即可。特别是对于postgres,我建议您使用官方图像然后从那里去。通过查看与映像相关联的Dockerfile,您将学到很多有关如何使用容器的知识;)
这是dockerhub上postgres映像的链接
以及带有标签的图像的相关dockerfile:最新
如果您有任何想要解释的内容,只需评论一下答案,我会在答案中进行扩展。
答案 1 :(得分:0)
在Centos7上,所有服务都是通过systemd守护程序启动和停止的。 systemctl命令将仅尝试使用d-bus通道与守护程序对话-这就是消息的来源。仅仅是因为容器中没有systemd。
docker-systemctl-replacement script可用于避免这种情况。并且docker-systemctl-images examples已经包含一个postgres变体。