Docker训练nnUNet

Docker 命令整理

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]   
   
  -d, --detach=false         指定容器运行于前台还是后台,默认为false    
  -i, --interactive=false    打开STDIN,用于控制台交互   
  -t, --tty=false            分配tty设备,该可以支持终端登录,默认为false   
  -u, --user=""              指定容器的用户   
  -a, --attach=[]            登录容器(必须是以docker run -d启动的容器) 
  -w, --workdir=""           指定容器的工作目录  
  -c, --cpu-shares=0         设置容器CPU权重,在CPU共享场景使用   
  -e, --env=[]               指定环境变量,容器中可以使用该环境变量   
  -m, --memory=""            指定容器的内存上限   
  -P, --publish-all=false    指定容器暴露的端口   
  -p, --publish=[]           指定容器暴露的端口  
  -h, --hostname=""          指定容器的主机名   
  -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录   
  --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录 
  --cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities   
  --cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities   
  --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法   
  --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU   
  --device=[]                添加主机设备给容器,相当于设备直通   
  --dns=[]                   指定容器的dns服务器   
  --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件   
  --entrypoint=""            覆盖image的入口点   
  --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量   
  --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口   
  --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息   
  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用   
  --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字   
  --net="bridge"             容器网络设置: 
                                bridge 使用docker daemon指定的网桥      
                                host    //容器使用主机的网络   
                                container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源   
                                none 容器使用自己的网络(类似--net=bridge),但是不进行配置  
  --privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities   
  --restart="no"             指定容器停止后的重启策略: 
                                no:容器退出时不重启   
                                on-failure:容器故障退出(返回值非零)时重启  
                                always:容器退出时总是重启   
  --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)   
  --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 

运行Docker镜像

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA$ sudo docker run -it --rm --name abdomen --gpus all py38pt17:py17-cuda11 
[sudo] liuhz 的密码: 
root@f18029097471:/workspace# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          39T  7.7T   29T  22% /
tmpfs            64M     0   64M   0% /dev
tmpfs            63G     0   63G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sda2        39T  7.7T   29T  22% /etc/hosts
tmpfs            63G   12K   63G   1% /proc/driver/nvidia
tmpfs            13G  3.9M   13G   1% /run/nvidia-persistenced/socket
udev             63G     0   63G   0% /dev/nvidia0
tmpfs            63G     0   63G   0% /proc/asound
tmpfs            63G     0   63G   0% /proc/acpi
tmpfs            63G     0   63G   0% /proc/scsi
tmpfs            63G     0   63G   0% /sys/firmware
root@f18029097471:/workspace# nvidia-smi
Thu Apr 28 06:40:10 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:18:00.0 Off |                  N/A |
| 30%   36C    P8    31W / 350W |  20587MiB / 24268MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  Off  | 00000000:3B:00.0 Off |                  N/A |
| 67%   63C    P2   197W / 350W |  23631MiB / 24268MiB |     16%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  NVIDIA GeForce ...  Off  | 00000000:5E:00.0 Off |                  N/A |
| 30%   33C    P8    20W / 350W |      8MiB / 24268MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  NVIDIA GeForce ...  Off  | 00000000:86:00.0 Off |                  N/A |
| 30%   41C    P8    25W / 350W |      8MiB / 24268MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

以交互式模式启动docker

docker container run --ipc=host -it --rm --gpus "device=0" --name nnunetv0 -v 本地path to/nnUNetData:/workspace/data nnunet_docker:v0 /bin/bash

$ sudo docker run --gpus all -it --rm --ipc=host -v /media/gy501/SSD/nnunet:/workspace/nnunet nvcr.io/nvidia/pytorch:20.09-py3

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker run --gpus all -it --rm --ipc=host -v /home/liuhz/Github/Naive2SOTA/nnUNetFrame/DATASET:/workspace/data nnunet_docker:v0 /bin/bash

$ docker run --gpus all -it --rm -v local_dir:container_dir nvcr.io/nvidia/pytorch:xx.xx-py3

参数解释:
-it means run in interactive mode 交互模式
--rm will delete the container when finished 在完成后删除容器
-v is the mounting directory 挂载目录
local_dir 是主机系统中您想要从容器中访问的目录或文件(绝对路径)。
container_dir 是本地目录是主机系统中您想要从容器中访问的目录或文件(绝对路径)。

整理数据集

参考结构树
nnUNet_raw_data_base/nnUNet_raw_data/Task002_Heart
├── dataset.json
├── imagesTr
│ ├── la_003_0000.nii.gz
│ ├── la_004_0000.nii.gz
│ ├── ...
├── imagesTs
│ ├── la_001_0000.nii.gz
│ ├── la_002_0000.nii.gz
│ ├── ...
└── labelsTr
├── la_003.nii.gz
├── la_004.nii.gz
├── ...

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/DATASET$ ls
nnUNet_cropped_data  nnUNet_preprocessed  nnUNet_raw_data  RESULTS_FOLDER

在nnUNet根目录下新建Dockerfile文件

FROM nvcr.io/nvidia/pytorch:21.08-py3
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3-pip \
    python3-setuptools \
    build-essential \
    && \
    apt-get clean && \
    python -m pip install --upgrade pip

WORKDIR /workspace
COPY ./   /workspace

RUN pip install pip -U
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

RUN pip install -e .

ENV nnUNet_raw_data_base="/workspace/data"
ENV nnUNet_preprocessed="/workspace/data/nnUNet_preprocessed"
ENV RESULTS_FOLDER="/workspace/data/RESULTS_FOLDER"

运行docker build命令

docker构建后无法修改trainer等文件,因此需要在代码无误后再在docker中封装成镜像。

docker build -t nnunet_docker:v0 .

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker build -t nnunet_docker:v0 .

Successfully built 1810c476249c
Successfully tagged nnunet_docker:v0
liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ ls

删除多余的Docker

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~$ sudo docker rmi c9247429b447
Error response from daemon: conflict: unable to delete c9247429b447 (cannot be forced) - image has dependent child images

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~$ sudo docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=c9247429b447)

这里可以将build好的docker保存到本地分享给有需要的小伙伴,命令如下

docker image save nnunet_docker:v0 -o nnunet_dockerv0.tar.gz

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker image save nnunet_docker:v0 -o nnunet_dockerv0.tar.gz

数据集转换

nnU-Net希望得到结构化格式的数据集。这种格式遵循[Medical Segmentation Decthlon]的数据结构。

root@49f40e566e82:/workspace# nnUNet_convert_decathlon_task -i /workspace/data/nnUNet_raw_data/Task01_BrainTumour -p 5

报错处理

  1. SimpleITK
RuntimeError: Exception thrown in SimpleITK ImageFileReader_Execute: /tmp/SimpleITK-build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx:1980:
ITK ERROR: ITK only supports orthonormal direction cosines.  No orthonormal definition found!

解决方案:

root@046f5dac3535:/workspace# pip install SimpleITK==2.0
Traceback (most recent call last):
  File "/opt/conda/bin/nnUNet_train", line 11, in <module>
    load_entry_point('nnunet', 'console_scripts', 'nnUNet_train')()
  File "/workspace/nnunet/run/run_training.py", line 137, in main
    trainer_class = get_default_configuration(network, task, network_trainer, plans_identifier)
  File "/workspace/nnunet/run/default_configuration.py", line 59, in get_default_configuration
    trainer_class = recursive_find_python_class([join(*search_in)], network_trainer,
  File "/workspace/nnunet/training/model_restore.py", line 37, in recursive_find_python_class
    tr = recursive_find_python_class([join(folder[0], modname)], trainer_name, current_module=next_current_module)
  File "/workspace/nnunet/training/model_restore.py", line 37, in recursive_find_python_class
    tr = recursive_find_python_class([join(folder[0], modname)], trainer_name, current_module=next_current_module)
  File "/workspace/nnunet/training/model_restore.py", line 28, in recursive_find_python_class
    m = importlib.import_module(current_module + "." + modname)
  File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/workspace/nnunet/training/network_training/nnUNet_variants/data_augmentation/nnUNetTrainerV2_DA5.py", line 22, in <module>
    from batchgenerators.transforms.local_transforms import BrightnessGradientAdditiveTransform, LocalGammaTransform
  File "/opt/conda/lib/python3.8/site-packages/batchgenerators/transforms/local_transforms.py", line 21, in <module>
    from batchgenerators.utilities.custom_types import ScalarType, sample_scalar
  File "/opt/conda/lib/python3.8/site-packages/batchgenerators/utilities/custom_types.py", line 19, in <module>
    ScalarType = Union[Union[int, float], Tuple[float, float], Callable[[Any, ...], Union[float, int]]]
  File "/opt/conda/lib/python3.8/typing.py", line 816, in __getitem__
    return self.__getitem_inner__(params)
  File "/opt/conda/lib/python3.8/typing.py", line 261, in inner
    return func(*args, **kwds)
  File "/opt/conda/lib/python3.8/typing.py", line 839, in __getitem_inner__
    args = tuple(_type_check(arg, msg) for arg in args)
  File "/opt/conda/lib/python3.8/typing.py", line 839, in <genexpr>
    args = tuple(_type_check(arg, msg) for arg in args)
  File "/opt/conda/lib/python3.8/typing.py", line 149, in _type_check
    raise TypeError(f"{msg} Got {arg!r:.100}.")
TypeError: Callable[[arg, ...], result]: each arg must be a type. Got Ellipsis.

Docker镜像上传

使用 docker login 命令登录账号

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker login -u harold2022
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

修改镜像 repository
上传镜像前我们必须通过 docker tag 命令修改镜像的 repository,使之与 Docker Hub 账号匹配。
Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ docker tag nnunet_docker:v1 harold2022/nnunet_docker:v1
liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker images -a
REPOSITORY                 TAG                               IMAGE ID       CREATED         SIZE
harold2022/nnunet_docker   v1                                3d969a290dd2   13 hours ago    26.1GB
nnunet_docker              v1                                3d969a290dd2   13 hours ago    26.1GB
nnunet_docker              v0                                e6e7950952e1   25 hours ago    13GB
newubuntu                  cuda10-ubuntu18                   0dd9ea953585   3 weeks ago     4.46GB
nvidia/cuda                10.2-cudnn8-devel-ubuntu18.04     0dd9ea953585   3 weeks ago     4.46GB
pytorch/pytorch            1.11.0-cuda11.3-cudnn8-devel      730572d0c0dd   7 weeks ago     13.7GB
hello-world                latest                            feb5d9fea6a5   7 months ago    13.3kB
nvidia/cuda                11.4.0-cudnn8-devel-ubuntu20.04   1885dcefbe89   7 months ago    9.01GB
py38pt17                   py17-cuda11                       f20d42e5d606   18 months ago   12GB
pytorch/pytorch            1.7.0-cuda11.0-cudnn8-devel       f20d42e5d606   18 months ago   12GB
nvidia/cuda                11.0-base                         2ec708416bb8   20 months ago   122MB
pytorch/pytorch            1.6.0-cuda10.1-cudnn7-devel       bb833e4d631f   21 months ago   7.04GB
liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ 

上传镜像
我们使用 docker push 命令将镜像上传到 Docker Hub:

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ sudo docker push harold2022/nnunet_docker:v1
[sudo] liuhz 的密码: 
The push refers to repository [docker.io/harold2022/nnunet_docker]
643276880307: Layer already exists 
ebd73e86c645: Layer already exists 
0e00fb7958ca: Layer already exists 
271642b69e95: Layer already exists 
070cabc2eaa3: Layer already exists 
7ef887ba4a3f: Layer already exists 
36cd314e6807: Layer already exists 
3095ea55b1c9: Layer already exists 
626800c31be3: Layer already exists 
eca318b890fc: Layer already exists 
03aea7c9e3d1: Layer already exists 
53194dce1444: Layer already exists 
ef8330bcc944: Layer already exists 
964ee116c0c0: Layer already exists 
7a694df0ad6c: Layer already exists 
3fd9df553184: Layer already exists 
805802706667: Layer already exists 
v1: digest: sha256:a85255cc0ca5054cadc3a61a4ca8bd349c00c46586e5068776e07b8c99455b25 size: 3903

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~$ sudo docker tag 0b4ade9938b3 harold2022/upupup:latest
liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~$ docker images -a
REPOSITORY                 TAG                               IMAGE ID       CREATED          SIZE
harold2022/upupup          latest                            0b4ade9938b3   18 minutes ago   13GB
upupup                     latest                            0b4ade9938b3   18 minutes ago   13GB
<none>                     <none>                            22b2e0fabf03   18 minutes ago   13GB
<none>                     <none>                            62c837db5edb   18 minutes ago   13GB
<none>                     <none>                            f18cef610392   18 minutes ago   13GB
<none>                     <none>                            ea43ffa240c0   21 minutes ago   12.1GB
<none>                     <none>                            95cefb54e0d8   21 minutes ago   12.1GB
<none>                     <none>                            50326d1bd31d   21 minutes ago   12.1GB
harold2022/nnunet_docker   v1                                3d969a290dd2   7 days ago       26.1GB
<none>                     <none>                            6a2fb0a04897   7 days ago       26.1GB
<none>                     <none>                            bdebb6388c26   7 days ago       26.1GB
<none>                     <none>                            54c8f6597ebe   7 days ago       26.1GB
<none>                     <none>                            cc735d7f6c7b   7 days ago       25.1GB
<none>                     <none>                            801398be2723   7 days ago       25.1GB
<none>                     <none>                            510fe98c4a00   7 days ago       25.1GB
<none>                     <none>                            e70a40183fc7   8 days ago       12.1GB
<none>                     <none>                            5efc50a43b80   8 days ago       12.1GB
nvidia/cuda                10.2-cudnn8-devel-ubuntu18.04     0dd9ea953585   4 weeks ago      4.46GB
pytorch/pytorch            1.11.0-cuda11.3-cudnn8-devel      730572d0c0dd   8 weeks ago      13.7GB
hello-world                latest                            feb5d9fea6a5   7 months ago     13.3kB
nvidia/cuda                11.4.0-cudnn8-devel-ubuntu20.04   1885dcefbe89   7 months ago     9.01GB
py38pt17                   py17-cuda11                       f20d42e5d606   18 months ago    12GB
pytorch/pytorch            1.7.0-cuda11.0-cudnn8-devel       f20d42e5d606   18 months ago    12GB
nvidia/cuda                11.0-base                         2ec708416bb8   20 months ago    122MB
pytorch/pytorch            1.6.0-cuda10.1-cudnn7-devel       bb833e4d631f   21 months ago    7.04GB

使用docker inspect查看获取容器/镜像的元数据。

liuhz@ubuntu-SYS-7049GP-TRTC-RI017:~/Github/Naive2SOTA/nnUNetFrame/nnUNet$ docker inspect harold2022/nnunet_docker:v1

                "RESULTS_FOLDER=/workspace/data/RESULTS_FOLDER"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "ENV RESULTS_FOLDER=/workspace/data/RESULTS_FOLDER"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:6a2fb0a048974dba4e73dc573376489141e4a8c5fdce321417c0876130f97878",
            "Volumes": null,
            "WorkingDir": "/workspace",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "com.nvidia.cudnn.version": "8.0.4.30",
                "com.nvidia.volumes.needed": "nvidia_driver",
                "maintainer": "NVIDIA CORPORATION <cudatools@nvidia.com>"
            }
        },
        "DockerVersion": "20.10.14",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "CUDA_VERSION=11.0.3",
                "LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64",
                "NVIDIA_VISIBLE_DEVICES=all",
                "NVIDIA_DRIVER_CAPABILITIES=compute,utility",
                "NVIDIA_REQUIRE_CUDA=cuda>=11.0 brand=tesla,driver>=418,driver<419 brand=tesla,driver>=440,driver<441 brand=tesla,driver>=450,driver<451",
                "NCCL_VERSION=2.7.8",
                "LIBRARY_PATH=/usr/local/cuda/lib64/stubs",
                "CUDNN_VERSION=8.0.4.30",
                "nnUNet_raw_data_base=/workspace/data",
                "nnUNet_preprocessed=/workspace/data/nnUNet_preprocessed",
                "RESULTS_FOLDER=/workspace/data/RESULTS_FOLDER"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:6a2fb0a048974dba4e73dc573376489141e4a8c5fdce321417c0876130f97878",
            "Volumes": null,
            "WorkingDir": "/work
            "OnBuild": null,
            "Labels": {
                "com.nvidia.cudnn.version": "8.0.4.30",
                "com.nvidia.volumes.needed": "nvidia_driver",
                "maintainer": "NVIDIA CORPORATION <cudatools@nvidia.com>"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 26078928961,
        "VirtualSize": 26078928961,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/home/liuhz/Docker/docker/overlay2/28186cee9d33535607cfeb6460abe79815e0aaa5dc87a61019d8eb8979f1ac65/diff:/home/liuhz/Docker/docker/overlay2/e9f8958fa885a660b3810090561dbc9f8d770ae93569fbbc646d13792ca25f84/diff:/home/liuhz/Docker/docker/overlay2/0552dab98d60a7ff100ea98cbcd0d58c7cef63eb0a16cd0a2408b7b3805c33c6/diff:/home/liuhz/Docker/docker/overlay2/8659fa72951cae20fe2428d901fe62f31ea3cb00758d4c53bf0384fb4ac499cb/diff:/home/liuhz/Docker/docker/overlay2/78a26bf9a42f4d7d7d4de8d071a7c6d47a279515a1ed8e38f1174e47e0c4e20c/diff:/home/liuhz/Docker/docker/overlay2/2ae3477c80524bcf3c4e861e06c0dc7faa708117fee5c8f7038a109ff5c31728/diff:/home/liuhz/Docker/docker/overlay2/620c6d7600b0736a6127c6e934139318eb755ff0c378cc9b29c037ddd764fb6d/diff:/home/liuhz/Docker/docker/overlay2/2c9c66a127e9a9681f97e0aa2df49cedd027a095b54d7b4c08fa46de443ebfde/diff:/home/liuhz/Docker/docker/overlay2/3fe47706f787822b6cb9e2f9562a5290b30d12e2614c99b5508aca1fd5a7a333/diff:/home/liuhz/Docker/docker/overlay2/11b2792517edb821cb67613e9fa78f356ee23343f65d530ec55eb4a465b8a31c/diff:/home/liuhz/Docker/docker/overlay2/b04163a448a30b4c5d4b651738a15e1afb507999293af14cd241c643b9efc010/diff:/home/liuhz/Docker/docker/overlay2/1ffcf4b75a3e1795d0d21954b8d83e77ee7b2bb7ab22509ab5f8fa0998e8a0bb/diff:/home/liuhz/Docker/docker/overlay2/866db32fdda605d08096ca4507874efcf4ba96fdbc6ac55fb1608fc4a55e055b/diff:/home/liuhz/Docker/docker/overlay2/f951c45ae456995f58a3a5913a26491648aba4850ef4102aac2056876154c764/diff:/home/liuhz/Docker/docker/overlay2/067882aa81a605b0cca989105319c6f7a951fd73fa8037210093aca18d09e344/diff:/home/liuhz/Docker/docker/overlay2/bed16741e4f4c4134a759a3ad76b6a658b2bf5f7a4fdaedb7e862ead5855ead7/diff",
                "MergedDir": "/home/liuhz/Docker/docker/overlay2/8c853d82ff068200c6ae208fb3697f144937330db9c10bf3bcf02d7c16d50622/merged",
                "UpperDir": "/home/liuhz/Docker/docker/overlay2/8c853d82ff068200c6ae208fb3697f144937330db9c10bf3bcf02d7c16d50622/diff",
                "WorkDir": "/home/liuhz/Docker/docker/overlay2/8c853d82ff068200c6ae208fb3697f144937330db9c10bf3bcf02d7c16d50622/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:80580270666742c625aecc56607a806ba343a66a8f5a7fd708e6c4e4c07a3e9b",
                "sha256:3fd9df55318470e88a15f423a7d2b532856eb2b481236504bf08669013875de1",
                "sha256:7a694df0ad6cc5789a937ccd727ac1cda528a1993387bf7cd4f3c375994c54b6",
                "sha256:964ee116c0c06f2be7ceb6566e485b7472872b539d4b9ecea731b67966fb7191",
                "sha256:ef8330bcc94457526bfc5b5bf658cc70f80c4ea82d6e1d93e28526885efff564",
                "sha256:53194dce14446627b1f9915d27c925d43d52e84660ea0f19a858de28de4b89cb",
                "sha256:03aea7c9e3d145201f821a5f386d3f1dc425d91c7c5ef60d94f1f7fd06a848aa",
                "sha256:eca318b890fc4b51d716a54873f818d1211c7c19b0bd8c8e83c56972fa5dd717",
                "sha256:626800c31be3fd6f5141b96023332dfbf8e2884e6bdd61644470710dc90c8b58",
                "sha256:3095ea55b1c97e8ba399be67974e17cadc11b502693ea44cb0cb81455b61cdc2",
                "sha256:36cd314e68078461474e2ac400e52ff8d868ec9abc3accd0d84fe446924d67e4",
                "sha256:7ef887ba4a3ff2d8e75b3ea8478a7c34e7322b3e180bc69c7bc8e5734d6f904b",
                "sha256:070cabc2eaa36d1ed3e8dd41ba970e17f84f3ca008c1828e14d07900d8fb3d22",
                "sha256:271642b69e955b22563a1029957184495f5e06c9e0494eec22685ce76a051b91",
                "sha256:0e00fb7958ca784b4ec5ebb9cefdc87372d3824e4fc5bf7a92ed1b79322d41e9",
                "sha256:ebd73e86c6451e75575b28ab14298435455692d673fc5da24acb5fdbcf2754ca",
                "sha256:643276880307e2d04f41e0d687e36154c95301b2aefb4be3bf9fbb6a777aa030"
            ]
        },
        "Metadata": {
            "LastTagTime": "2022-04-29T16:21:11.642126059+08:00"
        }
    }
]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • 1....................................................... ...
    teddy09阅读 163评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,510评论 18 139
  • nnUnet介绍 本文主要解决拿来就用的问题,具体nnUet技术细节可以查看原文,代码,以及一些介绍的文章[htt...
    杨晓凯阅读 3,915评论 1 0
  • 一.docker 是什么: 2.安装docker 系统:ubuntu16.04 使用脚本自动安装 Docker 官...
    Black_Sun阅读 2,099评论 0 2
  • Docker安装与使用 一、docker安装。 1、安装要求: 1)docker要求服务CentOS6以上,ker...
    卬之别录阅读 1,923评论 0 1