【问题标题】:Can't restart docker container: OCI runtime create failed: container with id exist无法重新启动 docker 容器:OCI 运行时创建失败:具有 id 的容器存在
【发布时间】:2018-09-12 15:53:00
【问题描述】:

我是 Docker 的新手,我尝试在 google 中找到解决方案,然后再提出问题 - 没有结果。

我决定通过实际用例来学习 docker - 在我的 VM 实例中创建 PostgreSQL 容器以开发环境。 我一直在度假,几天没有检查我的服务器。后来我尝试连接到我的数据库,但无法 - 我的所有活动容器都以代码128 退出。 我尝试使用 DB 重新启动容器 - docker start django-postgres 并收到错误消息 - Error response from daemon: OCI runtime create failed: container with id exists: 5c11e724bf52dd1cb6fd10ebda40710385e412981eb269c30071ecc8aac9e805: unknown Error: failed to start containers: django-postgres

我怀疑在我的系统 docker 中某处保留了我的容器的一些元数据,这些元数据在容器关闭后使用代码 128 被删除,但我对 unix 的了解不足以确定它可能在哪里。另外,我害怕丢失与容器连接的数据库数据。

一些技术信息: docker version:

Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:10:01 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm

docker info

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: cannot found cgroup mount destination: unknown 我找到了解决方案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 容器没有帮助。

【问题讨论】:

    标签: linux docker daemon


    【解决方案1】:

    可以使用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

    【讨论】:

    • 非常感谢您的详细解释!
    猜你喜欢
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2018-11-06
    相关资源
    最近更新 更多