linux - 无法重启 docker 容器 : OCI runtime create failed: container with id exist

标签 linux docker daemon

我是 Docker 的新手,在提问之前我尝试在 google 中找到解决方案 - 没有结果。

我决定通过实际用例来学习 docker - 在我的 VM 实例中创建 PostgreSQL 容器用于开发环境。 我一直在度假,几天没有检查我的服务器。后来我尝试连接到我的数据库,但无法连接 - 我所有的事件容器都已退出,代码为 128。 我尝试使用 DB 再次启动容器 - docker start django-postgres 并收到错误消息 - 来自守护程序的错误响应:OCI 运行时创建失败:容器 ID 存在:5c11e724bf52dd1cb6fd10ebda40710385e412981eb269c30071ecc8aac9e805:未知 错误:无法启动容器:django-postgres

我怀疑我的系统 docker 中的某个地方保留了我的容器的一些元数据,这些元数据在容器关闭后没有被删除,代码为 128,但我对 unix 的了解不足以确定在哪里有可能。另外,我担心丢失与容器连接的数据库数据。

一些技术信息: docker版本:

版本:18.03.0-ce API版本:1.37 转版本:go1.9.4 Git 提交:0520e24 build 时间:2018 年 3 月 21 日星期三 23:10:01 操作系统/架构:linux/amd64 实验性的:假的 编排器:swarm

docker 信息

Containers: 9
 Running: 2
 Paused: 0
 Stopped: 7
Images: 5
Server Version: 18.03.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-116-generic
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 488.3MiB
ID: NDUH:OH24:4M4L:TR5O:TOIH:ARV4:LNRP:6QNE:WEYW:TMXR:7KNK:ZPDD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support

有没有人可以帮助我理解我的问题以及如何在不丢失数据的情况下解决它?

N.B. 第二个以代码 128 退出的容器是 OpenVPN。我也无法重新启动它,但错误有所不同 - cgroups:找不到 cgroup 挂载目标:未知 我找到了解决方案 here (github) :

Temp fix is
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

此修复对 Postgres 容器没有帮助。

最佳答案

可以使用 docker ps -a 列出所有正在运行和已停止的容器. -a or --all显示所有容器(默认显示正在运行)。

您可以使用 docker inspect <container-id> 找到附加到旧 postgres 容器的卷(也许管道更少并搜索卷)

如果你想恢复你的数据,你可以将它附加到一个新的 postgres 容器并恢复它。 (如果是根卷更改目标为/)

docker run --name new-postgres \
--mount source=myoldvol,target=/var/lib/postgresql/data -d postgres

然后您可以使用 docker rm <container-id> 删除旧的.

有关详细信息,请参阅,

docker ps , docker volumes , docker rm

关于linux - 无法重启 docker 容器 : OCI runtime create failed: container with id exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49628073/

相关文章:

php - 与我的 PHP 安装混淆

intellij-idea - 如何使用 intellij 在 docker 容器中开发?

c# - 使用通用主机 IHostBuilder 时检测来自 docker 的关闭信号

docker compose 找不到我的文件

django - 将 celery 作为守护进程运行不会创建 PID 文件

linux - 内核 Oops 从用户空间访问 BAR 寄存器

等待线程可以休眠吗?

linux - 目标是从显示信息中提取视频驱动程序版本,然后将其与支持的版本列表进行比较

python多处理: sleep statement killed?