在Docker v.18.09.3中,如何在停止docker之前使用SystemD运行docker命令

时间:2019-05-02 07:06:44

标签: docker google-compute-engine systemd

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

我使用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:超时”:不可用。

问题显然是由于 ContainerD 不再可用。我尝试过

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

没有成功。

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

2 个答案:

答案 0 :(得分:1)

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

  1. killall -9 dockerd
  2. sudo服务docker restart

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

答案 1 :(得分:0)

这很可能是由于fixed中的容器/ docker集成问题cos-73-11647-192-0引起的。您可以在cos-73-11647-192-0上试用吗?