一个计算机技术爱好者与学习者

0%

Docker问题记录

1. 前言

本文记录使用Docker过程中遇到的问题和解决办法。

2. docker启动失败

2.1. 问题描述

docker启动卡住,查看日志

1
2
systemctl status docker -l
journalctl -ru docker

报错:

1
Error (Unable to complete atomic operation, key modified) deleting object [endpoint 622bf1a499580702606742e5f5554ac99e7c0d61abcd5d9063881fc2da33d16f afdce62ce70de2cbe5a971b05521280940947e4968c163e48c3e5252919a4fae], retrying....

2.2. 解决办法

1
2
3
4
ps -ef | grep docker
kill -9 xxx
systemctl stop containerd
systemctl start docker

3. OCI runtime create failed

3.1. 问题描述

原本可以正常启动nvidia runtime的容器,使用相同的启动命令,突然有一天开始报错:

1
2
3
4
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #1:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: driver error: failed to process request: unknown.

docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #1:: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: load library failed: /usr/bin/../lib64/libm.so.6: symbol __strtof128_nan, version glibc_private not defined in file libc.so.6 with link time reference: unknown.

3.2. 解决办法

尝试了重启docker、重启主机、重装nvidia-container-tookit、重装nvidia驱动,全部无效。

最终解决办法:检查libm.so.6的软链指向,修改指向到另外的libm。

1
2
cd /usr/bin/../lib64/
ln -snf libm-2.17.so libm.so.6

4. error pulling image configuration

4.1. 问题描述

docker pull ubuntu 报错:

1
2
3
4
Using default tag: latest
latest: Pulling from library/ubuntu
6b851dcae6ca: Pulling fs layer
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/99/99284ca6cea039c7784d1414608c6e846dd56830c2a13e1341be681c3ffcc8ac/data?verify=1687183284-D5%2FDxEvl7V%2BLtRcgWmwP0MDFiTo%3D: dial tcp 104.18.125.25:443: i/o timeout

4.2. 问题分析

production.cloudflare.docker.com 的IP是会变化的,当前的这个 104.18.121.25 刚好被墙了,无法访问。
查看是否被墙的办法:访问ITDOG,输入 production.cloudflare.docker.com 这个网址。

4.3. 解决办法一

配置使用镜像站,从镜像站拉取镜像,避开 production.cloudflare.docker.com 这个域名。

1、编辑docker配置文件

1
vim /etc/docker/daemon.json

添加 registry-mirrors 配置,配置方法参考《Docker镜像站的配置和使用》

2、重启docker

1
2
systemctl restart docker
docker info

4.4. 解决办法二

解决办法一,有时也不可行,因为有可能全国都被墙了,镜像站也无法从源站拉取我们需要的镜像。

此时只能使用终极解决办法:使用梯子。
方法一:机器上直接配置使用梯子,配置方法参考《Linux配置网络代理》
方法二:搭建一个docker本地镜像站,配置使用梯子;其他机器配置使用这个docker镜像站。配置方法参考《Docker镜像站的配置和使用》

5. failed to compute cache key

5.1. 问题描述

已知Dockerfile内容为:

1
2
3
FROM alpine:3.7.3
WORKDIR /home/work
COPY Dockerfile .

Dockerfile所在目录,执行docker build报错:

1
failed to compute cache key: failed to calculate checksum of ref moby::heujqm1lca2el12jsbquzoarg: "/Dockerfile": not found

5.2. 解决办法

检查 .dockerignore 文件,大概率是因为该文件中忽略了 Dockerfile