Docker 问题汇总


本文为解决问题实际操作,不做过多原理解释,不明白请自行 google

1.免 root 权限操作 docker(为当前用户添加执行 docker  的权限)

#centos
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用

#ubuntu
sudo usermod -aG docker $USER

2.修复 Docker 没有提示

⑴.检查 ~/.bashrc 中是否包含如下脚本、及/etc/bash_completion 目录

#先检查是否包含/etc/bash_completion目录,如果不包含直接看⑵
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
# 不一定和我这里的完全一样 包含/etc/bash_completion 就好,如果是注释了就解除注释
# 如果不包含就添加上然后执行source ~/.bashrc,再测试是否可行,不行的话继续往下看

⑵.安装 bash-completion,开启提示功能

sudo apt-get install -y bash-completion # 1.自动补齐需要依赖工具bash-complete,如果没有,则需要手动安装
source /usr/share/bash-completion/bash_completion # 2.生效脚本
source /usr/share/bash-completion/completions/docker # 3.如果还不行就执行这个
# 4.docker-compose没提示的话就执行下面这句
source /usr/share/bash-completion/completions/docker-compose

# 请再按照⑴的方法检测一遍,防止下次连接后没有提示。

3.[centos]修复 docker logs 不显示日志(更新 Docker 版本)

#首先看了一下docker的版本
$ docker -v
Docker version 1.13.1, build 7f2769b/1.13.1
#发现版本比较低,试了好多种方法都没能解决;具体原因不太清楚,可能是这个版本的bug,想着升级一下试试吧,说干就干!

#卸载旧版本: 只是卸载管理软件,镜像和容器不会丢失
#千万不要删除 /var/lib/docker/ 会导致镜像容器丢失
$ sudo yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-selinux \
           docker-engine-selinux \
           docker-engine

#安装一些必要的系统工具:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#添加软件源信息:
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新 yum 缓存:
$ sudo yum makecache fast

#安装最新docker-ce(社区版)
$ sudo yum -y install docker-ce



# ***重新加载配置文件,否则修改不会生效。***
#会导致docker运行异常,如:启动容器提示“Error response from daemon: Unknown runtime specified docker-runc”
$ sudo systemctl daemon-reload

#重启docker
$ sudo systemctl restart docker

#设置docker开机自启
$ sudo systemctl enable docker

#然后在进行测试
$ docker logs 容器名称

### ok可以正常显示日志了,至此问题解决成功。

4.安装或升级 DockerCompose

curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
###容器方式运行(解决架构兼容问题)
#方法一
docker run --rm -v /usr/local/bin:/dist gists/docker-compose-bin:latest && docker rmi gists/docker-compose-bin:latest
#方法二
sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

5.开启远程访问

# 编辑启动配置文件
vi /lib/systemd/system/docker.service

# 找到ExecStart=/usr/bin/dockerd 这一行,如果处于注释状态请启用,
# 检查是否包含 "-H tcp://0.0.0.0:2375", 如果不含就添加上。添加后如下:
#<centos7
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
#>=centos7
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
# 重新加载服务的配置文件
systemctl daemon-reload

#<centos7
service docker restart
#>=centos7
systemctl restart docker

6.清理构建失败的镜像

# 方法一:使用自带命令进行清理
docker system prune

# 方法二:筛选清理
docker rmi $(docker images |grep '<none>' | awk '{print $3}')

7.修改容器(docker update)

#重命名
docker rename 旧名称 新名称

## 修改为开机自启
# "no" 默认
# always 总是启动
# on-failure 如果执行失败
# unless-stopped 除非停止
docker update --restart=always 容器标识

# 修改cpu限制 --cpuset-cpus 0-2/1/0,1 (可以是一个或多个)
docker update --cpuset-cpus "1" 容器标识

# 修改内存限制(在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制)
docker update -m 1500M --memory-swap 1500M  容器标识
# 同时限制cpu和内存(在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制)
docker update --cpuset-cpus "1" --memory "1g" 容器标识

#控制容器竞争同一个cpu时间片的占比shares(最大1024)
#只有当多个容器使用同一个核心时配置才生效(在没有抢占的情况下使用全部时间片)
docker update --cpuset-cpus "1" --cpuset-shares 500 --memory "1g" 容器标识

8.从镜像中提取 Dockerfile

###dfimage是一个alpine的镜像,启动的时候,通过将docker.sock映射到容器内部来运行,通常将这个操作做成别
#使用alias创建别名(快捷指令)
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
#例如提取nginx:latest的Dockerfile
dfimage nginx:latest

文章作者: 慕书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 慕书 !
评论
  目录