详解docker中使用systemctl启动服务报错的解决办法

docker版本:

[root@localhost gae_proxy]# docker version
Client:
 Version:     1.10.3
 API version:   1.22
 Package version: docker-common-1.10.3-46.el7.centos.10.x86_64
 Go version:   go1.6.3
 Git commit:   d381c64-unsupported
 Built:      Thu Aug 4 13:21:17 2016
 OS/Arch:     linux/amd64

Server:
 Version:     1.10.3
 API version:   1.22
 Package version: docker-common-1.10.3-46.el7.centos.10.x86_64
 Go version:   go1.6.3
 Git commit:   d381c64-unsupported
 Built:      Thu Aug 4 13:21:17 2016
 OS/Arch:     linux/amd64

镜像版本

[root@b2ca5610d3da /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

在docker中通过systemctl 启动服务的时候总是报Failed to get D-Bus connection: Operation not permitted 这样的错误提示。

[root@25d27693a24d ~]# systemctl start sshd
Failed to get D-Bus connection: Operation not permitted

解决办法就是在docker run 的时候运行/usr/sbin/init 。比如:

[root@localhost /]# docker run -tid --name hadoopbase centos/hadoopbase:v001 /usr/sbin/init

这样运行起来的container就可以使用systemctl来启动服务了,有的人说在CentOS7.2中解决了通过systemctl运行报错的问题,但是我在实际操作中还是遇到这样的问题。

还有一种解决办法,就是在通过Dockerfile生成镜像文件的时候,通过CMD来执行/usr/sbin/init这条命令,即:CMD [ "/usr/sbin/init"];

参考:https://github.com/docker/docker/issues/7459
          https://github.com/docker/docker/issues/2296

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker容器内应用服务自启动的方法示例

    如果想把Docker容器内的应用服务随着容器开启时自启动.只需要将服务启动的脚本写在Dockerfile里,然后用Dockerfile重构镜像即可实现: 编写应用服务自启动脚本 编写Dockerfile 重构镜像 开启容器 编写服务自启动脚本(dockerd) (tomcat为例) #!/bin/bash # # # # chkconfig: 345 98 30 # description: tomcat program. # processname: tomcat # Source funct

  • docker compose 服务启动顺序控制的方法

    概要 docker-compose 可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序. docker-compose 中的 depends_on 配置是容器的启动顺序, 并不是容器中服务的启动顺序. 问题重现 首先, 我们构造一个示例, 来演示 docker-compose 带来的问题. docker-compose.yml 文件如下: version: '2' services: web: image:

  • CentOS7 docker服务无法启动解决方案及实现步骤

    CentOS7  docker服务无法启动解决方案 检查步骤 启动docker服务: systemctl restart docker 这个时候会报错,请进行以下步骤: 1. 找到报错的类型,或者报错的说明. 2. 检查docker的配置文件 3. 检查磁盘空间 4. 检查端口占用情况 步骤详解 检查报错类型,查看日志: journalctl -xe 检查配置文件,不同操作系统位置基本相同: /etc/sysconfig/docker/ 或者直接找到docker运行程序,一般会有相关配置文件的默

  • Docker如何同时启动多个服务

    前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务 1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下 FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rp

  • Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    本文实例为大家分享了Dockerfile创建支持ssh服务自启动的容器镜像,供大家参考,具体内容如下 1. 首先创建一个Dockerfile文件,文件内容如下 # 选择一个已有的os镜像作为基础 FROM centos:centos6 # 镜像的作者 MAINTAINER Fanbin Kong "kongxx@hotmail.com" # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y openssh

  • 详解docker中使用systemctl启动服务报错的解决办法

    docker版本: [root@localhost gae_proxy]# docker version Client: Version: 1.10.3 API version: 1.22 Package version: docker-common-1.10.3-46.el7.centos.10.x86_64 Go version: go1.6.3 Git commit: d381c64-unsupported Built: Thu Aug 4 13:21:17 2016 OS/Arch: l

  • 详解React-Router中Url参数改变页面不刷新的解决办法

    问题 今天在写页面的时候发现一个问题,就是在React Router中使用了Url传参的功能,像这样: export class MainRouter extends React.Component { render() { return ( <BrowserRouter> <Switch> ... <Route exact path={'/channel/:channelId'} component={ChannelPerPage}/> ... </Switch

  • MySQL中Multiple primary key defined报错的解决办法

    创建主键可以有两种方式: create table 表名( 字段名 类型, 字段名 类型, -- primary key(name) ); 或者是 create table 表名( 字段名 类型 primary key, 字段名 类型, -- ); 但是要注意的是,想要创建复合主键,就不可以用第二种方式. 下面列举一个小例子: 这里报错Multiple primary key defined,表示定义了多个主键,正确的写法是如下: 如果项设置复合主键,复合主键的特点是同时创建.同时删除,所以需要

  • 详解Android中PopupWindow在7.0后适配的解决

    本文介绍了详解Android中PopupWindow在7.0后适配的解决,分享给大家,具体如下: 这里主要记录一次踩坑的经历. 需求:如上图左侧效果,想在按钮的下方弹一个PopupWindow.嗯,很简单一个效果,然当适配7.0后发现这个PopupWindow显示异常,然后网上找到了下面这种方案. 7.0适配方案(但7.1又复现了) // 将popupWindow显示在anchor下方 public void showAsDropDown(PopupWindow popupWindow, Vie

  • 详解cookie验证的php应用的一种SSO解决办法

    详解cookie验证的php应用的一种SSO解决办法 近日,项目中需要接入一个"年久失修"的PHP应用,由于系统已经建设多年,并且是信息中心自己的人通过某些工具弄出来的,而且是本人未真正接触过的PHP写的,而且跟我们的系统不在同一服务器上也就是存在跨域的问题,想通过客户端模拟登录的方式来实现,但是总是不成功. 没办法,只好想尽一切办法查看页面源代码,然后,找服务器的php文件,分析. 由于对php不熟悉,加上没有仔细看,因此,对于找到的登录页面的php文件,一开始只是有一个初步的了解,

  • 详解iOS14 Widget 开发相关及易报错地方处理

    首先了解下如何创建 Xcode -> File -> New -> Target 找到 Widget Extension 如果你的 Widget 支持用户配置属性,则需要勾选这个(例如天气组件,用户可以选择城市),不支持的话则不用勾选 了解下创建Widget后,系统给我们生成的文件内容 下面这个代码是没有勾选 Include Configuration Intent 的地方 Provider // Provider,顾名思义为小组件提供信息得一个struct struct Provide

  • 详解vue-cli项目在IE浏览器打开报错解决方法

    首先要知道VUE官网已表明仅支持IE8以上版本(不包括IE8),css弹性布局flex各浏览器支持如下: 假如项目用到弹性布局,则项目仅支持IE10以上版本. 另外兼容其他低版本的,请另寻它法. 网上说的本人试了都是没用的,下面是亲自试验的解决方法. 1. 问题 :ie浏览器打开vue2.0项目空白,控制台报错 vuex requires a Promise polyfill in this browser; 解决方法: 安装babel-polyfill npm install babel-po

  • docker容器调用yum报错的解决办法

    dockerfile里或者在容器里执行yum,报错,找不到源(invalid baseurl xxx),但是宿主机上执行yum是没问题的啊,为什么? 因为不论是dockerfile使用RUN关键字执行yum还是直接进入到容器里面执行yum,它们都是使用的docker镜像里面的源(CentOS是在路径/etc/yum.repo.d/CentOS-Base.repo),所以你要把宿主机上的同路径下的源拷贝到容器里面,然后docker commit一个新的"基础镜像",这个时候使用docke

  • Typescript中使用引用路径别名报错的解决方法

    在TS中引用路径别名提示找不到模块或者相应的声明 1.ts中使用路径别名报错 在react中通常路径别名都是在webpack的webpack.config.js文件中配置的,但是在引入了ts之后,webpack中的路径别名引用失效了此时我们需要在跟src文件同级目录的tsconfig.json文件中添加配置: 注意要在compilerOptions中添加(webpack中的路径也需要配置) "compilerOptions": { "target": "e

  • django启动uwsgi报错的解决方法

    uwsgi介绍 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / uwsgi / uWSGI 这三个概念的区分. WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信. 而u

随机推荐