Tag: docker
-
docker rm容器报错Error response from daemon: driver “overlay” failed to remove root filesystem for xxx device or resource busy 解决办法
docker删除容器报错信息: [root@moneyslow.com ~]# docker rm -f 6105a0e6d7dc Error response from daemon: driver “overlay” failed to remove root filesystem for 6105a0e6d7dc3e1c9f7f68ed273dcc22e9b954e6f0ddbd58026da6ee839a0c2d: remove /var/lib/docker/overlay/f9614e02b2c67bae1d6df46d5ca470a6468c2597ed7be82134ac9df3a8f3d5ce/merged: device or resource busy 我就呵呵了,设备忙。思路,找谁在用这个目录, 用 f9614e02b2c67bae1d6df46d5ca470a6468c2597ed7be82134ac9df3a8f3d5ce 这段找找系统里mount信息里使用这个玩意的进程: [root@moneyslow.com ~]# grep 5ca470a6468c2597ed7be82134ac9df3a8f3d5ce /proc/*/mountinfo /proc/15877/mountinfo:171 167 0:38 / /var/lib/docker/overlay/f9614e02b2c67bae1d6df46d5ca470a6468c2597ed7be82134ac9df3a8f3d5ce/merged rw,relatime shared:113 – overlay overlay rw,lowerdir=/var/lib/docker/overlay/3e608cff644197e9909e640a5e856618ef44d38b4ef804d3927a91377b23d50f/root,upperdir=/var/lib/docker/overlay/f9614e02b2c67bae1d6df46d5ca470a6468c2597ed7be82134ac9df3a8f3d5ce/upper,workdir=/var/lib/docker/overlay/f9614e02b2c67bae1d6df46d5ca470a6468c2597ed7be82134ac9df3a8f3d5ce/work 以上看到没有,proc后面跟的就是进程号 15877,看看是什么东西: [root@moneyslow.com ~]# ps -ef|grep 15877 ntp 15877…
-
docker 常用监控手段
docker监控 1.监控的分类 prometheus ——大规模的docker监控 第三方监控软件,红帽将其融合到centos 8中了, sysdig ——当前container实时监控 weave scope——结构可视化监控 cAdvisor/Heapster——google图形化监控 zabbix一般用于页面监控,不用于监控docker 2.docker自带的监控工具 docker container docker container top id docker container status 3.linux自带的监控工具 tcpdump htop iftop lsof strace 4.实验: (1)sysdig监控: docker container run -it –rm –name=sysdig –privileged=true –volume=/var/run/docker.sock:/host/var/run/docker.sock –volume=/dev:/host/dev –volume=/proc:/host/proc:ro –volume=/boot:/host/boot:ro –volume=/lib/modules:/host/lib/modules:ro –volume=/usr:/host/usr:ro sysdig/sysdig 在容器中运行 csysdig F2 回车,直接点然后就是以每一项排序 F7每一列的解释 (2)weave scope——结构可视化监控——容器地图 下载这个软件包 curl -L git.io/scope…
-
制作中国时区的alpine 最小镜像解决时间问题
默认的alpine 时间是不对的,自己稍微改造一下,dockerfile 如下: FROM alpine:latest MAINTAINER moneyslow <good@moneyslow.com> RUN apk update && apk add tzdata \ && cp -r -f /usr/share/zoneinfo/PRC /etc/localtime 方法2: mount 宿主机的/etc/localtime
-
docker proxy TLS handshake timeout.
docker 设置代理后下载镜像的时候会报错: TLS handshake timeout. 解决办法: /etc/systemd/system/docker.service.d# cat http-proxy.conf [Service] Environment=”HTTP_PROXY=http://192.168.50.165:6500/” “NO_PROXY=localhost,127.0.0.1,hostname” Environment=”HTTPS_PROXY=http://192.168.50.165:6500/” 注意加的 “NO_PROXY=localhost,127.0.0.1,hostname” 起作用。 重启system的服务: systemctl daemon-reload 验证下配置是否正常加载:systemctl show –property=Environment docker 重启docker:systemctl restart docker
-
docker Alpine镜像的中国时区东八区设置
Dockerfile修改 增加安装tzdata包 在安装包时安装tzdata安装包,并且在构建成功后不能清理此安装包 #定义环境变量 ENV TIME_ZONE Asia/Shanghai #dockerfile增加命令 RUN \ … #安装tzdata安装包 && apk add –no-cache tzdata \ 增加时区配置 安装此安装包后,会在/usr/share/zoneinfo目录下生成各时区配置信息,Alpine目录并无timezone及locatime配置,此时我们需要将时区值覆写至Alpine的timezone及localtime配置中,命令如下: RUN \ … #安装tzdata安装包 && apk add –no-cache tzdata \ #设置时区 && echo “${TIME_ZONE}” > /etc/timezone \ && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
-
docker 删除 状态 exited的容器
docker rm $(docker ps -q -f status=exited) docker rm $(docker ps –all -q -f status=exited)
-
[WARNING]: Empty continuation lines will become errors in a future release.解决办法
docker for mac 下版本: $ docker –version Docker version 17.09.0-ce, build afdb6d4 编译镜像出现错误: [WARNING]: Empty continuation lines will become errors in a future release. 解决办法: 去掉RUN里的注释即可。
-
docker 管理界面 portainer 的启动 (管理swarm mode 集群)
portainer: https://portainer.readthedocs.io/en/latest/deployment.html 只在miji0qamdnvkrinj009qa77yy 上运行portainer: docker service create \ –name portainer \ –publish 9000:9000 \ –constraint ‘node.id == miji0qamdnvkrinj009qa77yy’ \ –mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ –mount type=bind,src=/data/portainer/data,dst=/data \ docker.ifeng.com/portainer/portainer \ -H unix:///var/run/docker.sock 其他约束用法: –constraint ‘node.id == asdfasdfadf’ –constraint ‘node.role…
-
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
错误记录 max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] 解决办法 先解决第一条错误 max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] 原因分析: 操作系统的vm.max_map_count参数设置太小导致的 解决办法: 这里我们可以直接修改docker本身的参数,当然也可以直接修改宿主机本身的配置文件,需要注意的是在docker 容器中执行 sysctl -w vm.max_map_count=655360 会提示错误:…
-
如何在docker容器里手动重启php-fpm
php-fpm is a process manager which supports the USER2 signal, which is used to reload the config file. From inside the container: kill -USR2 1 Outside: docker exec -it <mycontainer> kill -USR2 1 Complete example: docker run -d –name test123 php:7.1-fpm-alpine docker exec -it test123 ps aux docker exec -it test123 kill -USR2 1 docker…
-
shell自动改密码 非交互模式要求两次输入密码
docker的ftp启用的时候,需要加用户和改密码。 https://hub.docker.com/r/stilliard/pure-ftpd/ 添加用户: pure-pw useradd bob -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/bob 改密码命令: pure-pw passwd bob -f /etc/pure-ftpd/passwd/pureftpd.passwd -m 想实现添加用户的时候就自动改密码: (echo “abcd”;sleep 1;echo “abcd”) | pure-pw useradd bob -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/bob > /dev/null 想实现docker启动后自动改密码方法: (echo “abcd”;sleep 1;echo “abcd”) | pure-pw passwd bob -f /etc/pure-ftpd/passwd/pureftpd.passwd -m > /dev/null
-
dockerfile 之php5.6.32扩展安装memcache memcachd redis mongodb
FROM php56:v1 LABEL maintainer=”moneyslow” RUN apk update && apk add autoconf openssl-dev g++ make && \ pecl install mongo && \ docker-php-ext-enable mongo RUN apk add –no-cache –virtual .build-deps pcre-dev && \ pecl install mongodb && \ docker-php-ext-enable mongodb RUN apk add rsync php5-memcache php5-mysql php5-mssql php5-bz2…
-
dockerfile 之php7的memcache、memcached、redis、mongodb 扩展安装
—————————————————– php 7 ——————————————————————————- 参考:https://stackoverflow.com/questions/31369867/how-to-install-php-redis-extension-using-the-official-php-docker-image-approach Slightly revised version of starikovs and skyred answers for the current PHP 7 version of the docker image (tested on php:7.0.8-fpm-alpine and php:7.0.8-alpine). Uses the newly released 3.0 version (June 2016) for PHP 7. 安装redis扩展 ENV PHPREDIS_VERSION 3.0.0 RUN mkdir -p /usr/src/php/ext/redis \ && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz |…
-
基于nginx-php-fpm的docker安装php7的redis扩展memcahced扩展
镜像:https://hub.docker.com/r/richarvey/nginx-php-fpm/ php版本:FROM php:7.1.11-fpm-alpine 下载镜像并启动容器: docker run -d richarvey/nginx-php-fpm 进入容器: docker exec -it 08f7c84d5b84 bash 1 php -m|grep redis 2 mkdir -p /usr/src/php/ext/redis 3 curl -L https://github.com/phpredis/phpredis/archive/3.0.0.tar.gz | tar xvz -C /usr/src/php/ext/redis –strip 1 4 echo ‘redis’ >> /usr/src/php-available-exts 5 docker-php-ext-install redis 6 php -m|grep…
-
docker容器删除状态为Removal In Progress
[root@www.moneyslow.com ~]# systemctl restart docker 重启docker后,发现一个容器状态开始为Dead,后来转为 Removal In Progress [root@www.moneyslow.com ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …
-
Docker daemon 只能响应本地Host的客户端请求,开启允许远程客户端请求
在A机器 服务端xx.xx.xx.xx 上 # locate docker.service /usr/lib/systemd/system/docker.service 增加 -H tcp://0.0.0.0 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0 systemctl daemon-reload systemctl restart docker.service # netstat -anlp|grep docker tcp6 0 0 :::2375 :::* LISTEN 13327/dockerd 从其他机器客户端: # docker -H…
-
docker–获取容器ip地址
### Example #1 ### $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2e23d01384ac iperf-v1:latest “/usr/bin/iperf -s” 10 minutes ago Up 10 minutes 5001/tcp, 0.0.0.0:32768->5201/tcp compassionate_goodall # Append the container ID (CID) to the end of an inspect $ docker inspect –format ‘{{ .NetworkSettings.IPAddress }}’ 2e23d01384ac 172.17.0.1 ### Example #2 ### #…
-
docker-获取容器ip地址的10个方法
10 EXAMPLES OF HOW TO GET DOCKER CONTAINER IP ADDRESS Much of the motivation to show so many different ways is to help folks see the flexibility that I still run into nearly daily which is hard not to excite a hacker. They can also be viewed in this Gist. 1 2 3 4 5 6…
-
docker cp容器和宿主机的文件复制拷贝
在容器共用volumes文章中我们假设启动了两个容器new1 和 new2 ,而且共用一个volumes,其内容为/cookbook/foobar 这个文件。 以下步骤我们将完成从容器new1 拷贝文件foobar到宿主机,更改文件内容后 拷贝到容器 new2 ,然后删除宿主机的本地文件,因为new1 和 new2 是共享volumes,所以我们再次拷贝new1 的foobar 文件下来,应该看到我们修改过的foobar 已有的两个容器,共享volumes: [root@iZj6c4kga39y2z70xmt5y9Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS …
-
docker–启动一个容器利用docker inspect -f {{.Mounts}} 查看容器内目录和对应宿主机目录对应关系
建立容器,配置一个默认的“数据容器”,卷名称为cookbook # docker run -it -v /cookbook ubuntu:14.04 /bin/bash Unable to find image ‘ubuntu:14.04’ locally 14.04: Pulling from library/ubuntu cf0a75889057: Pull complete c8de9902faf0: Pull complete a3c0f7711c5e: Pull complete e6391432e12c: Pull complete 624ce029a17f: Pull complete Digest: sha256:b2a55128abd84a99436157c2fc759cf0a525c273722460e6f8f9630747dfe7e8 Status: Downloaded newer image for ubuntu:14.04 在容器内建立一个文件: root@ed38309b8e26:/# cd cookbook/ root@ed38309b8e26:/cookbook# touch foobar root@ed38309b8e26:/cookbook# exit 查看容器id # docker ps…
-
docker–创建一个数据库挂载本地物理机目录数据而且进行mysqldump备份
创建并启动mysql的容器,设置好数据库密码 # docker run –name mysqlwp -e MYSQL_ROOT_PASSWORD=123123 \ > -e MYSQL_DATABASE=wordpress \ > -e MYSQL_USER=wordpress \ > -e MYSQL_PASSWORD=wordpresspwd \ > -v /home/docker/mysql:/var/lib/mysql \ > -d mysql Unable to find image ‘mysql:latest’ locally latest: Pulling from library/mysql 10a267c67f42: Pull complete c2dcc7bb2a88: Pull complete 17e7a0445698: Pull complete 9a61839a176f: Pull complete a1033d2f1825: Pull complete 0d6792140dcc: Pull…
-
Docker–利用Supervisor在同一个容器中运行wordpress 包含httpd and mysql
配置文件地址: https://github.com/how2dock/docbook/tree/master/ch01/supervisor 建立wordpress目录,按配置文件地址建3个文件: Dockerfile (保护数据库密码) Supervisord.conf wp-config.php cd wordpress 建立镜像: docker build -t wordpress . 运行容器: docker run –d –p 80:80 wordpress 网页可以访问这个ip: http://xxx:80 下载一个工具: wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker; echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc 利用工具docker-enter进入容器: docker-enter b98d252eb7f6 /bin/bash docker ps –a 查出容器id 进入容器mysql…
-
docker–镜像的删除 Untagged 和 Deleted 的区别
# docker rmi ubuntu:14.04 Untagged: ubuntu:14.04 Untagged: ubuntu@sha256:b2a55128abd84a99436157c2fc759cf0a525c273722460e6f8f9630747dfe7e8 Deleted: sha256:2ff3b426bbaafba63cae165e8f6a4955a24a53cdf6d25cce00353e97cda3df71 Deleted: sha256:674ac1ba904977cbee239556b7e9ec92addb590d0ed9689bcf9c4a8afd967927 Deleted: sha256:b4fb204519c474988eb7f16b97f9ce6e2fb0f6deb273d64a01b9eec8f3096921 Deleted: sha256:d264f10c88539212472e700e8abbd78ec2c73b02c59587bc76c22963b4214628 Deleted: sha256:e6b73004f2f4cc27ec61a3593512c3d1e0dad911e509ceef8526764f4f6aac62 Deleted: sha256:a8e78858b03ba02c3df71d555f90057f890495aabc86e7a39396c68c87ed5ff2 Untagged 和 Deleted 如果观察上面这几个命令的运行输出信息的话,你会注意到删除行为分为两类,一类是 Untagged,另一类是 Deleted。我们之前介绍过,镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。 因此当我们使用上面命令删除镜像的时候,实际上是在要求删除某个标签的镜像。所以首先需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么 Delete 行为就不会发生。所以并非所有的 docker rmi 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。 当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为。镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。镜像的多层结构让镜像复用变动非常容易,因此很有可能某个其它镜像正依赖于当前镜像的某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真实的删除当前层。这就是为什么,有时候会奇怪,为什么明明没有别的标签指向这个镜像,但是它还是存在的原因,也是为什么有时候会发现所删除的层数和自己 docker pull 看到的层数不一样的源。 除了镜像依赖以外,还需要注意的是容器对镜像的依赖。如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。之前讲过,容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像。 用 docker images 命令来配合 像其它可以承接多个实体的命令一样,可以使用 docker images -q 来配合使用 docker rmi,这样可以成批的删除希望删除的镜像。比如之前我们介绍过的,删除虚悬镜像的指令是: $ docker rmi…
-
docker–容器的终止、启动、删除
列出正在运行的容器container # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50f00085b48f nginx:v2 “nginx -g ‘daemon …” 7 minutes ago Up 6 seconds 0.0.0.0:81->80/tcp webserver2 e033ce3a2d90 nginx “nginx -g ‘daemon …” About an hour ago Up 11 seconds 0.0.0.0:80->80/tcp webserver1 停止容器: # docker stop webserver1 webserver1 # docker stop webserver2 webserver2 启动容器: #…
-
Docker安装—centos7 下安装docker-ce 最新版
官方文档:https://docs.docker.com/engine/installation/linux/docker-ce/centos/ 1 删除旧版本docker yum remove docker docker-common container-selinux docker-selinux docker-engine 2 安装yum-utils 我们需要 yum-config-manager 工具 yum install -y yum-utils 3 利用yum增加 docker-ce 的repo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo 4 默认edge repository 是disable 的,我们来enable 它 yum-config-manager –enable docker-ce-edge 5 更新软件包信息: yum makecache fast 6 安装最新版本的docker: yum –y install docker-ce # rpm -qa|grep docker docker-ce-selinux-17.05.0.ce-1.el7.centos.noarch docker-ce-17.05.0.ce-1.el7.centos.x86_64 7 有时候需要安装特定版本的docker,首先list出可用版本: #yum…
-
Docker 的平台支持和版本说明
平台支持: 目前docker的CE和EE所支持的平台情况如下所示,大家所钟情的Ubuntu和CentOS作为Linux发行版所支持的CE和EE均支持的。 版本说明: 2017年的3月1号开始,版本的格式变为如下 项目 说明 版本格式 YY.MM stable版本 (gives you reliable updates every quarter) 每个季度发行 edge版本 (gives you new features every month) 每个月发行 当前CE版本 17.05.0-ce
-
如何在centos7 上安装 docker container
有两种方法 1 从 get.docker.com 下载安装包 # yum update # curl -sSL https://get.docker.com/ | sh # service docker start # docker run hello-world 2 用 yum package manager 直接安装 Install Docker via yum package manager. # yum update # cat >/etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF # yum install docker-engine # service docker start #…