Docker备忘录

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

    docker stats

    > 查看所有运行着的容器占用资源情况

    docker volume inspect redis-data

    > 查看redis-data这个volume

    docker volume ls

    > 查看volume列表

    docker system df

    > 查看docker占用的磁盘容量

    [root@ecs ~]# docker system df
    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)