Docker备忘录
docker images
查看所有的镜像
docker rm 容器名
删除容器,多见于容器名重复时使用
docker rmi 镜像名
用于删除镜像
du -hs 目录名
查看目录所占容量大小
docker ps
查看所有容器进程
拷贝文件
docker cp 容器ID/名称: 容器内路径 容器外路径
从容器内 拷出
docker cp 容器外路径 容器ID/名称: 容器内路径
从外部 拷贝文件到容器内
显示日志
docker logs 容器ID
不是实时日志
docker logs -f 容器ID
日志实时显示
docker logs -ft 容器ID
显示日志的时间戳
docker logs -f –tail [要查看末尾多少行] 默认all 容器ID
日志实时显示末尾多少行
创建一个容器
docker run -i
创建容器常用的参数说明:创建容器命令:
docker run -i:表示运行容器
-t:表示容器启动后会进入其命令行。
加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
–restart=always :表示,该容器随docker服务启动而自动启动
例子:
- ```
运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 –name redis505 –restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5[root@ecs ~]# docker system df
docker stats
> 查看所有运行着的容器占用资源情况
docker volume inspect redis-data
> 查看redis-data这个volume
docker volume ls
> 查看volume列表
docker system df
> 查看docker占用的磁盘容量
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 32 11 8.36GB 3.739GB (44%)
Containers 11 11 2.153GB 0B (0%)
Local Volumes 30 3 3.161GB 3.032GB (95%)
Build Cache 0 0 0B 0B
- 其中:RECLAIMABLE是被未使用的image所占据的容量。
docker system prune -a
> 清理上面的空间
>
> 执行`docker system prune`命令后,会提示下边的信息,也就是-a参数所代表的意思。
>
> ⚠️⚠️WARNING! This will remove:
> - all stopped containers
> - all networks not used by at least one container
> - all dangling images
> - all dangling build cache
>
> ⚠️谨慎使用,防止数据丢失。
>
> 如果仅执行上边的参数,volume空间将不会被释放,可以使用docker system prune -a --volumes来解决。
docker-compose up -d
> 只需要写好docker-compose.yml,就可以了。通过compose运行容器(我一般拿来更新容器)
如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器
其他命令:
lrzsz
- rz 收文件,也就是从win向linux上传
- sz 发文件,从linux向win下载
## 报错及解决方法
1. 启动或重启容器时报错 Error response from daemon: driver failed programming external connectivity on endpoint
原因:启动docker后,开启了ufw防火墙,或者是启动docker后,安装了防火墙。
解决办法:重启docker,`systemctl restart docker`。[参考](https://blog.csdn.net/whatday/article/details/86762264)
2. 防火墙问题,多出现于容器内无法解析域名 [参考](https://blog.csdn.net/fgx_123456/article/details/87857723)
- 安装ufw`sudo apt-get install ufw`
- 启用ufw`ufw enable`
- 更改ufw配置。
在Ubuntu中,如果使用UFW,即 Uncomplicated Firewall,那么还需对其做一点儿改动才能让Docker 工作。Docker使用一个网桥来管理容器中的网络。默认情况下,UFW会丢弃所有转发的数据包(也称分组)。因此,需要在 UFW中启用数据包的转发,这样才能让Docker 正常运行。我们只需要对/etc/default/ufw文件做一些改动即可。
更改`DEFAULT_FORWARD_POLICY="DROP",为`ACCEPT`
- 重新加载ufw,`sudo ufw reload`
参考链接
> [整理了一些 Docker常用命令](https://www.shutiaoya.com/122.html)