【Docker】日常记录
文章目录
- /var/lib/docker 目录解释
- [Docker Volume - 目录挂载以及文件共享](https://kebingzao.com/2019/02/25/docker-volume/#dockerfile-volume-%E7%9A%84%E6%9D%83%E9%99%90%E5%92%8C%E8%AE%B8%E5%8F%AF)
- Docker-compose ports 与 Dockerfile EXPOSE 区别
- docker 内“Temporary failure resolving 'security.ubuntu.com” 报错信息
- 查看各容器IP地址
- 查看docker container logs size
- 清理docker container logs
- 如何更改 docker-compose 启动的正在运行中的服务配置
- Linux安装docker-compose
- 修改已运行的Docker容器启动配置参数
- 方法一:Docker 命令修改
- 方法二:直接改配置文件
- 修改docker container 的挂载路径
- 清理docker
- 手动清理
- 自动清理
- 修改docker默认的存储位置
- Docker mysql 导出、导入数据
- [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf
- 其他命令
- docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: \"prom/pushgateway\": stat prom/pushgateway: no such file or directory".
- docker ps 完整输出
- docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
- docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx (d639abcca455cfb2ae23110a56b08732522da0cb64146f7141ca99a8c54704b7): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 运行容器之后,一直处于restarting 状态
- docker 服务启动失败
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT ...
- failed to start daemon: Error initializing network controller: Error creating default "bridge" network: could not find an available, non-overlapping
- iptables no chain/target/match by that name
- root 进入docker 容器(加参数 -u root)
/var/lib/docker 目录解释
* /var/lib/docker/devicemapper/devicemapper/data * 用来存储相关的存储池数据 * /var/lib/docker/devicemapper/devicemapper/metadata * 用来存储相关的元数据。* /var/lib/docker/devicemapper/metadata/ * 用来存储 device_id、大小、以及传输_id、初始化信息* /var/lib/docker/devicemapper/mnt * 用来存储挂载信息 * /var/lib/docker/container/ * 用来存储容器信息* /var/lib/docker/graph/ * 用来存储镜像中间件及本身详细信息和大小 、以及依赖信息* /var/lib/docker/repositores-devicemapper * 用来存储镜像基本信息* /var/lib/docker/tmp * docker临时目录 * /var/lib/docker/trust * docker信任目录* /var/lib/docker/volumes * docker卷目录
Docker Volume - 目录挂载以及文件共享
Docker-compose ports 与 Dockerfile EXPOSE 区别
# ports:暴露容器端口到主机任意端口或指定端口,用法:
# docker-compose.yml
ports:- "80:80"- "91:81"# expose:将当前容器的端口暴露给同一个networks 的其他容器,用法:# docker-compose.yml
expose: - '3000'- '9000'# Dockerfile
EXPOSE "3000"
docker 内“Temporary failure resolving 'security.ubuntu.com” 报错信息
解决方案:
vim /etc/docker/daemon.json
{ "dns": ["8.8.8.8", "114.114.114.114"]
} 重启docker
systemctl restart docker
查看各容器IP地址
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
查看docker container logs size
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
清理docker container logs
#!/bin/shecho "==================== start clean docker containers logs =========================="logs=$(find /var/lib/docker/containers/ -name *-json.log)for log in $logsdoecho "clean logs : $log"cat /dev/null > $logdoneecho "==================== end clean docker containers logs =========================="
如何更改 docker-compose 启动的正在运行中的服务配置
docker-compose up -d
Linux安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
修改已运行的Docker容器启动配置参数
我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动
方法一:Docker 命令修改
docker container update --restart=always 容器名字
方法二:直接改配置文件
首先停止容器,不然无法修改配置文件
配置文件路径为:
/var/lib/docker/containers/容器ID
在该目录下找到一个文件
hostconfig.json
,找到该文件中关键字 RestartPolicy修改前配置:
“RestartPolicy”:{“Name”:“no”,“MaximumRetryCount”:0}
修改后配置:
“RestartPolicy”:{“Name”:“always”,“MaximumRetryCount”:0}
最后启动容器。
修改docker container 的挂载路径
1、停止docker服务
systemctl stop docker.service(关键,修改之前必须停止docker服务)
2、vim /var/lib/docker/containers/container-ID/hostconfig.json
“Binds”:["/home/website:/usr/share/nginx/website"]
2、vim /var/lib/docker/containers/container-ID/config.v2.json
- 修改配置文件中的目录位置,然后保存退出
- 大致格式如下:
“MountPoints”:{
“容器内文件路径”:{“Source”:“宿主机文件路径”,“Destination”:“容器内文件路径”,“RW”:true,“Name”:"",“Driver”:"",“Type”:“bind”,“Relabel”:“rw”,“Propagation”:“rprivate”,“Spec”:{“Type”:“bind”,“Source”:"宿主机文件路径,“Target”:“容器内文件路径”}}
}
- 示例:
-v /home/website:/usr/share/nginx/website
“MountPoints”:{
“/usr/share/nginx/website”:{“Source”:"/home/website",“Destination”:"/usr/share/nginx/website",“RW”:true,“Name”:"",“Driver”:"",“Type”:“bind”,“Relabel”:“rw”,“Propagation”:“rprivate”,“Spec”:{“Type”:“bind”,“Source”:"/home/website",“Target”:"/usr/share/nginx/website"}}
}
3、启动docker服务
systemctl start docker.service
4、启动docker容器
docker start <container-name/ID>
摘自:https://blog.csdn.net/zedelei/article/details/90208183
清理docker
手动清理
删除所有无用容器
docker ps -a | awk '{ print $1}' | wc -l 统计共有多少容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n -num) //删除倒数num个容器如果无用的比较多,启动所有有用的,再删除,运行中的容器是不能被移除的1、删除所有悬空镜像,不删除未使用镜像:
docker rmi $(docker images -f "dangling=true" -q)
2、删除所有未使用镜像和悬空镜像
docker rmi $(docker images -q)
3、清理卷
如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):
删除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)
4、容器清理
如果发现是容器占用过高的空间,可以手动删除一些:
删除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)
自动清理
docker system prune
docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息。
docker system prune
可对空间进行自动清理。
该命令所清理的对象如下:
- all stopped containers (已停止容器)
- all networks not used by at least one container (未被任何容器所关联的网络)
- all dangling images (未被任何容器使用的卷)
- all dangling build cache (所有悬空的镜像)
已使用的镜像:指所有已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的所有容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像
悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定-t参数配置Tag导致的。
docker image prune:删除悬空的镜像。docker container prune:删除无用的容器。
- 默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
- 如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
- $ docker container prune --filter "until=24h" docker volume prune:删除无用的卷。
docker network prune:删除无用的网络
修改docker默认的存储位置
摘自:https://blog.csdn.net/qq_35119422/article/details/85869361
docker 的所有images及相关信息存储位置为:/var/lib/docker
查看默认的docker存储路径
docker info |grep ‘Docker Root Dir’
WARNING: No swap limit support
Docker Root Dir: /var/lib/docker
停止所有docker容器
sudo docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
停止docker服务
sudo service docker stop
打包docker目录
cd /var/lib
sudo tar -czvf /usr/docker.tar.gz docker/
cd /usr/
sudo tar -xzvf docker.tar.gz
修改docker默认的存储位置
sudo vim /etc/docker/daemon.json
{“graph”: “/home/server/docker”
}
启动docker服务
sudo service docker start
启动所有docker容器
sudo docker start $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
查看修改后docker存储路径
docker info |grep ‘Docker Root Dir’
WARNING: No swap limit support
Docker Root Dir: /usr/docker
Docker mysql 导出、导入数据
// 导出数据和表结构:
# docker exec -i mysql mysqldump -uroot -p12345678 db > db.sql
// 导出表结构:
# docker exec -i mysql mysqldump -uroot -p12345678 -d db > db.sql// 导入
# scp db.sql root@<ip地址>:/tmp/db.sql
# docker cp db.sql mysql_container:/opt/ms.sql
# docker exec -it mysql_container bash
> mysql -uroot -p12345678
> create database db;
> use db;
> source <路径>/db.sql;
[emerg] getpwnam(“www”) failed in /etc/nginx/nginx.conf
root@xxx:/home/xxx# docker logs nginx
nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:6本地解决方法:
useradd www
groupadd wwwdocker 解决方式:
其他命令
摘自:https://blog.csdn.net/qq_35119422/article/details/85869361
停止所有docker容器
sudo docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
停止docker服务
sudo service docker stop
修改mysql路径
cd ~
sudo cp -r mysql/ /home/server/
备份容器配置文件
cd /var/lib/docker/containers/de9c6501cdd3
cp hostconfig.json hostconfig.json.bak
cp config.v2.json config.v2.json.bak
修改hostconfig的冒号前的配置路径
vi hostconfig.json“Binds”: ["/home/server/mysql/conf/my.cnf:/etc/mysql/my.cnf", “/home/server/mysql/logs:/logs”, “/home/server/mysql/data:/mysql_data”],
修改config的Source的配置路径
vi config.v2.json
启动docker服务
sudo service docker start
启动所有docker容器
sudo docker start $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused “exec: “prom/pushgateway”: stat prom/pushgateway: no such file or directory”.
xxxx@debian:~/docker_package$ sudo docker run -d --name pushgateway -p 9091:9091 --network=prometheus_net test_pushgateway prom/pushgateway
[sudo] password for xxxx:
a6e9041545eb1208af80de45a60b1b8b627d0c51036d20dd781c968b3a7b5566
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused “exec: “prom/pushgateway”: stat prom/pushgateway: no such file or directory”.
解决方式:
因为commad 方式错误
那么进程为什么会退出?
如果是执行 service nginx start 这类启动后台服务程序的命令,那说明还是把 Docker 当做虚拟机了。Docker 启动的是进程,因此所谓的后台服务应该放到前台,比如应该 nginx -g ‘daemon off;’ 这样直接前台启动应用才对。
如果发现 COMMAND 一栏是 /bin/bash,那还是说明把 Docker 当虚拟机了。COMMAND 应该是应用程序,而不交互式操作界面,容器不需要交互式操作界面。此外,如果使用 /bin/bash 希望起一个交互式的界面,那么也必须提供给其输入和终端,因此必须加 -it 选项,比如 docker run -it ubuntu /bin/bash
那么如何查看使用的是什么commad 启动方式呢?
docker inspect <容器名称> 查看Cmd
或
docker ps -a
进入容器find / |grep <你看到COMMAND的部分命令>
或
进入容器 ps -fe ,但是我们没有成功,容器内没有ps 命令
解决问题:
查看完整输出:docker ps --no-trunc
docker ps 完整输出
关于 command 显示不全问题
显示完整输出
docker ps --no-trunc
docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
See ‘docker run --help’.
xxxx@debian:~$ sudo docker run -d
–name=mysql
-p 3306:3306
–network=container:nginx
-v /home/xxxx/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=xxxxx
-e TZ=Asia/Shanghai
test_mysql
/docker-entrypoint-initdb.d
docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
See ‘docker run --help’.
冲突的选项:端口发布和容器类型网络模式
解决:
删除-p 3306:3306
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx (d639abcca455cfb2ae23110a56b08732522da0cb64146f7141ca99a8c54704b7): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.
解决:
netstat -tlnp
查看占用的端口
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决方案:
查看/etc/docker/daemon.json 这个文件中的 用 {} 括起来
运行容器之后,一直处于restarting 状态
查看日志
docker logs <容器名称>
可能存在以下问题:
1. 缺少执行文件
2. 执行文件中语法错误
docker 服务启动失败
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT …
解决方案:
cd /etc/systemd/system/multi-user.target.wants
vim docker.service
去掉 After中 的firewalld.service
重启docker:
systemctl daemon-loaded
systemctl start docker
failed to start daemon: Error initializing network controller: Error creating default “bridge” network: could not find an available, non-overlapping
解决方案:
vim /etc/docker/daemon.json
{"ipv6": false
}
iptables no chain/target/match by that name
docker-compose up -d
之后报错 iptables no chain/target/match by that name
查看 iptables-save|grep docker
发现没有了 docker相关配置,
于是,重启docker服务 systemctl restart docker
自动生成 iptables 配置信息
再次执行
docker-compose up -d
问题解决!!!
root 进入docker 容器(加参数 -u root)
docker exec -it -u root <容器名> bash
【Docker】日常记录相关推荐
- 一、docker临时记录
docker 临时记录(阿里云centos7.2.1511 ) 查看系统版本号 适用于Redhat/CentOS: [root@iz2zecm4ndtkaue32tynx5z ~]# cat /etc ...
- 【日常记录】解决‘GLIBC_2.34‘ not found,并且gcc制定glibc版本编译
小荣的日常记录
- docker 学习记录1
一. 1. Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...
- 日常记录:java启动参数 -javaagent的使用,应用启动前添加代理包并且注册Mbean
前言 有时候是不是很苦恼想在不修改别人的应用(或者统一处理所有的应用)情况下如何添加额外功能?那么-javaagent启动参数就能处理这个问题. 还有上一章讲的(日常记录:java 注册以及获取MBe ...
- 日常记录20210102
日常记录20210102 记录内容 1.部分src平台的使用感受 2.今天找edu审洞的莫言问了一下cnvd通用的事 3.挖洞记录.思路 4.日常搜索语法 百度语法 谷歌语法 个人常用语法 5.lin ...
- augustus 软件安装与Docker使用记录
augustus 软件安装与Docker使用记录 augustus:一基因预测软件: Docker:应用容器引擎,可实现虚拟机. 一. 问题:Github下载的augustus难以正常安装及使用 本机 ...
- 最新 docker 日常总结-实用宝典-先收藏
docker 日常总结-实用宝典 问题 1. IPv4 forwarding disabled 2. Docker daemon socket权限不足 原因 解决方案 3. docker启动容器后就闪 ...
- 【日常记录】泰阿单兵武器库的下载与安装
小荣的日常记录 `
- docker 操作记录-3
docker操作记录ubu-16.04 [BEGIN] 2019/12/4 15:40:43 Last login: Wed Dec 4 13:56:18 2019 from 192.168.114. ...
- [日常记录]红绿双基色LED显示屏不同角度呈现不同颜色
红绿双色LED显示屏不同角度呈现不同颜色 日常记录 日常记录 1.问题现象:设备使用的红绿双基色LED显示屏,在做环境试验时,当设置显示为黄色时(即红绿LED同时亮起),从温箱外部观察发现两块屏幕显示 ...
最新文章
- pyqt5从子目录加载qrc文件_PyQt5快速上手基础篇10-QSettings用法
- 程序员如何用Java排序
- 安装es怎么在后台运行_ES备份索引数据到阿里云OSS
- IBM 公开最新 Power 处理器架构
- python nonetype报错_python 查询数据库数据 NoneType报错
- 模拟地与数字地(转)
- Java 集合系列-第七篇-List总结
- java 返回进度条_Java中的命令行进度条
- java中的方法重载
- 二十四小时不插电生活方案
- word2vec初步使用
- 三层架构Bll中报错找不到可接受类型为“Lesson.DAL.StudentDal”的第一个参数的扩展方法
- Gamma Correction(伽马校正)
- Trigger与Flip-Flop两种‘触发器’的区别
- 《ThinkPHP 5实战》4个实战开发案例可从代码仓库下载
- 在巴塞罗那,华为挥别昨日 | MWC 2019 1
- 涂料品牌排行榜前十名有哪些?
- vscode tab键突然不能缩进了
- smartform解决越南文预览正常 打印后字符乱码
- 再见了仪表盘!数据该有更好的“归宿”
热门文章
- NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档
- Paper:《Hidden Technical Debt in Machine Learning Systems—机器学习系统中隐藏的技术债》翻译与解读
- MySQL中间件之ProxySQL(13):ProxySQL集群
- JavaWeb学习总结(六)—HttpServletResponse
- 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解
- iOS 设置Label中特定的文字大小和颜色
- Codeforces 766E
- RuntimeException与CheckedException
- jquery,angular 对象数组的克隆和深度克隆
- 没用调用flush导致的数据保存丢失