实用指南:docker命令总结

docker 命令的总结,会 持续更新

一、命令

1.1 将容器提交为新的镜像 (docker commit)

  • 命令格式

    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]。

    CONTAINER : 要提交的容器名称或 ID。
    [REPOSITORY[:TAG]] : 为新创建的镜像指定仓库名和标签

  • 示例

    docker commit my_container my_new_image:snapshot

1.2 将镜像保存为 tar 文件 (docker save)

  • 命令格式

    docker save [OPTIONS] IMAGE [IMAGE...] > output.tar
    # 或
    docker save [OPTIONS] -o output.tar IMAGE [IMAGE...]

    IMAGE: 可以是镜像的名称:标签、镜像 ID 或 digest(使用 docker images 查看)可以同时保存多个镜像到一个 tar 文件
    output.tar: 保存的 tar 文件名(路径)。

  • 示例

    docker save my_new_image:snapshot > my_image_backup.tar
    # 或
    docker save -o my_image_backup.tar my_new_image:snapshot

1.3 从 tar 文件加载镜像 (docker load)

  • 命令格式

    docker load [OPTIONS]

    通常从标准输入读取 tar 文件内容。使用 < 操作符或 -i 选项指定文件。

  • 示例

    docker load < my_image_backup.tar
    # 或
    docker load -i my_image_backup.tar

1.4 查看镜像列表

docker images [选项]
# 或等价命令(推荐新手记忆):
docker image ls [选项]

常用选项

  • -a/--all:显示所有镜像(包括中间层镜像,默认仅显示顶层)。
  • -q/--quiet:仅显示镜像 ID(Quiet 模式)。
  • --filter/-f:过滤镜像(例如 docker images -f "dangling=true"显示无标签的悬空镜像)。

1.5 查看容器列表

# 查看运行中的容器
docker ps [选项]
# 等价命令:
docker container ps [选项]
# 查看所有容器(包括已停止的)
docker ps -a [选项]
# 等价命令:
docker container ps -a [选项]

常用选项

  • -a/--all:显示所有容器(包括停止、退出的)。
  • -q/--quiet:仅显示容器 ID。
  • -n <数字>/--last <数字>:显示最近创建的 N 个容器(例如 -n 3显示最近 3 个)。
  • -f "状态条件":过滤容器(例如 docker ps -f "status=exited"显示已退出的容器)。

1.6 运行容器

docker run [选项] 镜像名 [命令] [参数]
# 等价命令:
docker container run [选项] 镜像名 [命令] [参数]

核心选项(最常用):

  • -d/--detach:后台运行容器( detached 模式,默认前台运行)。

  • -p <主机端口>:<容器端口>:端口映射(例如 -p 8080:80将主机 8080 端口映射到容器 80 端口)。

  • -v <主机路径>:<容器路径>:文件/目录挂载(例如 -v /data:/app/data将主机 /data目录挂载到容器的 /app/data)。

  • --name <容器名>:为容器指定自定义名称(默认随机生成)。

  • -e <环境变量>:设置容器内环境变量(例如 -e MYSQL_ROOT_PASSWORD=123456)。

    示例

    docker run -d \
    --name my-nginx \       # 自定义容器名
    -p 8080:80 \            # 主机 8080 端口 → 容器 80 端口(Nginx 默认端口)
    -v /home/user/nginx/html:/usr/share/nginx/html \  # 挂载主机目录到容器(可选)
    nginx:latest            # 镜像名+版本

1.7 停止/重启容器(可选操作)

docker stop my-nginx    # 停止容器
docker start my-nginx   # 重启容器

1.8 拉取 Nginx 镜像

docker pull nginx:latest  # 拉取最新版 Nginx 镜像

二、问题

2.1 systemd 无法使用

System has not been booted with systemd as init system (PID 1). Can’t operate.

  • 需要镜像里面有 systemd 的安装包 没安装不能使用
docker run -it --privileged --entrypoint  /lib/systemd/systemd --name test 100askimx6ullubuntu:18.04

主要是要有这个命令 --privileged --entrypoint /lib/systemd/systemd

--privileged:使用特权模式

--entrypoint /lib/systemd/systemd:初始化 systemd作为主进程

  • 如果使用了 vsocde的.devcontainer 需要加上

    “overrideCommand”: false, // 禁用 VS Code 默认覆盖 entrypoint(核心修复)

2.2 nfs的使用

如果在 windows 上面安装的docker 不要想在docker 容器里面nfs的服务器了,因为nfs服务器需要 2049111 这两个端口,111 端口是 RPC 的转发端口,一般是有两种方式解决端口问题

  • 把windows 的 111 端口映射出来,会和 windows自带的端口产生 冲突 ,

  • 修改 rpc的端口,系统的很多服务都有使用RPC,会导致系统崩溃

  • windwos其他端口(2060)映射到容器的111 端口,

    在客户端也就是挂载的时候,mount这个命令找不到指定 rpc 端口的指令

  • 那么只有一个方法,也就是让docker的容器独立IP出来,这样网络环境就像一个物理机一样

    在docker当中,有两种方式可以实现容器独立IP,分别是 ipvlanmacvlan

    但是这两种方式在windows下面的Docker Desktop 都不适用

    想了解情况看下下面

2.3 windows下Docker Desktop的ipvlan、macvlan使用

官方论坛说了 ipvlan和macvlan是适用于linux内核的,并不适用windows

相关论坛主题:Docker Windows - Cannot create ipvlan on other then eth0 - wsl2 interface mirroring active - Docker Engine / General - Docker Community Forums

Macvlan, transparent, and host netowork types? - Docker Desktop - Docker Community Forums

在这里插入图片描述

所以不要折腾了,等官方支持吧

posted @ 2025-10-13 10:47  yxysuanfa  阅读(14)  评论(0)    收藏  举报