Sansx's Studio.

近期关于docker的问题

字数统计: 969阅读时长: 3 min
2019/06/10 Share

 

由于docker对win7的支持不是那么友好,有问题的地方不少,有时甚至不得不使用”特殊”的方法使用和操作docker容器。以下是几篇对我有帮助的文章,稍有修改。点击标题或者原文地址可查看原文。

启动docker

Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted

原文地址:https://forum.huawei.com/enterprise/zh/thread-427747.html

Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。

再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!

因此,请遵守容器设计原则,一个容器里运行一个前台服务!

我就想这样运行,难道解决不了吗?

答:可以,以特权模式运行容器。

创建容器:

1
docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init

进入容器:

1
docker exec -it centos7 /bin/bash

这样可以使用systemctl启动服务了。

使用ssh连接docker容器

原文地址:http://blog.csdn.net/qq_34021712/article/details/73379851

第一步:进入一个已经运行的docker容器中

第二步:设置root密码

第三步:安装Openssh

1
yum -y install openssh-server openssh-clients

第四步:修改SSH配置文件以下选项,去掉#注释,将四个选项启用:

$ vi /etc/ssh/sshd_config
进入文件后修改以下几项:

1
2
3
4
5
port=22 #开启22端口
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登录

重启ssh服务,并设置开机启动:

1
2
$ service sshd restart
$ chkconfig sshd on

重启sh服务时 报错,找不到命令bash: service: command not found
解决方法:yum install initscripts

然后再次启用 报错Failed to get D-Bus connection: Operation not permitted
网上查了一下说是centos7的坑
解决:在启用docker容器时 添加/usr/sbin/init

1
docker run -i -d --net=none --name javadocker3 -v /usr/local/software/:/mnt/software/ 3bee3060bfc8 /usr/sbin/init

第六步:测试是否可以通过ssh连接

第七步:保存为一个新的镜像,以后基于该镜像启动,不用再进行此操作了

1
docker commit -m 'base' -a 'wang sai chao' a142e478cbeb  java-base:base

其中:

-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;

-a 可以指定更新的用户信息;之后是用来创建镜像的容器的ID;

最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

停止、删除所有的docker容器和镜像

原文地址:https://colobu.com/2018/05/15/Stop-and-remove-all-docker-containers-and-images/

列出所有的容器 ID

1
docker ps -aq

停止所有的容器

1
docker stop $(docker ps -aq)

删除所有的容器

1
docker rm $(docker ps -aq)

删除所有的镜像

1
docker rmi $(docker images -q)

复制文件

1
2
docker cp mycontainer:/opt/file.txt /opt/local/
docker cp /opt/local/file.txt mycontainer:/opt/

docker 1.13新增:

清理镜像|容器|网络

1
2
3
docker image prune
docker container prune
docker system prune

  • docker image prune --force --all或者docker image prune -f -a : 删除所有不使用的镜像
  • docker container prune -f: 删除所有停止的容器
CATALOG
  1. 1.  
  2. 2. 启动docker
  • Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted
  • 使用ssh连接docker容器
    1. 0.1. 第一步:进入一个已经运行的docker容器中
    2. 0.2. 第二步:设置root密码
    3. 0.3. 第三步:安装Openssh
    4. 0.4. 第四步:修改SSH配置文件以下选项,去掉#注释,将四个选项启用:
    5. 0.5. 第六步:测试是否可以通过ssh连接
    6. 0.6. 第七步:保存为一个新的镜像,以后基于该镜像启动,不用再进行此操作了
  • 停止、删除所有的docker容器和镜像
    1. 0.1. 列出所有的容器 ID
    2. 0.2. 停止所有的容器
    3. 0.3. 删除所有的容器
    4. 0.4. 删除所有的镜像
    5. 0.5. 复制文件
  • 1. docker 1.13新增: