【问题标题】:How to use SystemD for running a docker command before docker is stopped in Docker v.18.09.3如何在 Docker v.18.09.3 中停止 docker 之前使用 SystemD 运行 docker 命令
【发布时间】:2019-05-02 07:06:43
【问题描述】:

在我的用例中,我想在 docker-daemon 停止之前使用 SystemD 备份 Docker volume

我得到了一个使用 Docker 17.03.2 的工作版本。 SystemD服务定义如下:

[Unit]
Description=Backup some Docker volume
Requires=network-online.target docker.service
After=docker.service

[Service]
Type=oneshot
ExecStop=/bin/sh /var/dobackup.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

/var/dobackup.sh 的内容在这里并不重要。它包含一个 docker 命令,该命令使用给定的 Docker 卷并在其上执行 tar

我在Google cloud compute enginecontainer optimized OS 中运行它可能很重要。特别是milestone 69(包括Docker v17.03.2)。

更新到 Docker v18.09.3

现在,我想更新到 Docker v18.09.3(特别是,我正在将正在运行的操作系统更新为 Container Optimized OS milestone 73)

上面的服务不再起作用。当 /var/dobackup.sh 中的 docker-command 正在运行时,我收到以下错误:

docker:来自守护进程的错误响应:所有 SubConns 都在 TransientFailure,最新连接错误:连接错误:desc = “传输:拨号时出错 unix:///var/run/containerd/containerd.sock: timeout": 不可用。

问题显然在于 ContainerD 不再可用。我试过了

Requires=network-online.target containerd.service docker.service

没有成功。

如何使我的服务适应 Docker v18.09?

【问题讨论】:

    标签: docker google-compute-engine systemd


    【解决方案1】:

    一些用户在以前的 Docker 版本(17.12 和 18.03)中报告了与 containerd.server 类似的问题。应用的解决方法是:

    1. killall -9 dockerd
    2. sudo service docker restart

    在这个link 中提到了一个类似的错误,以及用户在重新启动 docker 服务后如何解决这个问题。

    【讨论】:

    • :-/ 你有更多信息吗?例如相关问题的链接?
    【解决方案2】:

    这很可能是由 cos-73-11647-192-0 中的 containerd/docker 集成问题 fixed 引起的。你能在 cos-73-11647-192-0 上试试吗?

    【讨论】:

    • 感谢您的反馈。老实说,我想我不会很快找到时间尝试一下。
    猜你喜欢
    • 2023-03-16
    • 2018-05-20
    • 2020-07-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多