首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在只读主机文件系统上运行docker守护程序

如何在只读主机文件系统上运行docker守护程序
EN

Stack Overflow用户
提问于 2019-11-06 21:26:38
回答 3查看 1.5K关注 0票数 2

我有一个在只读根分区上运行Ubuntu 16.04.6LTS的Raspberry Pi 3。现在我尝试启动一个docker守护进程。但在重新启动后,它会显示:

代码语言:javascript
复制
ubuntu@z11:~$ docker info
Client:
 Debug Mode: false

Server:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info

当尝试重新启动docker守护程序时,我得到:

代码语言:javascript
复制
ubuntu@z11:~$ sudo systemctl daemon-reload
ubuntu@z11:~$ sudo systemctl restart docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

这是systemctl status docker.service的输出

代码语言:javascript
复制
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: failed (Result: start-limit-hit) since Thu 2016-02-11 17:28:26 CET; 14s ago
     Docs: https://docs.docker.com
  Process: 1620 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
 Main PID: 1620 (code=exited, status=1/FAILURE)

Feb 11 17:28:24 z11 systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Feb 11 17:28:24 z11 systemd[1]: Failed to start Docker Application Container Engine.
Feb 11 17:28:24 z11 systemd[1]: docker.service: Unit entered failed state.
Feb 11 17:28:24 z11 systemd[1]: docker.service: Failed with result 'exit-code'.
Feb 11 17:28:26 z11 systemd[1]: docker.service: Service hold-off time over, scheduling restart.
Feb 11 17:28:26 z11 systemd[1]: Stopped Docker Application Container Engine.
Feb 11 17:28:26 z11 systemd[1]: docker.service: Start request repeated too quickly.
Feb 11 17:28:26 z11 systemd[1]: Failed to start Docker Application Container Engine.
Feb 11 17:28:26 z11 systemd[1]: docker.service: Unit entered failed state.
Feb 11 17:28:26 z11 systemd[1]: docker.service: Failed with result 'start-limit-hit'.

这是我的/etc/fstab,带有只读根分区和可读写/var/lib/docker:

代码语言:javascript
复制
proc            /proc                   proc    defaults                                     0 0
/dev/mmcblk0p1  /boot                   vfat    ro                                           0 0
/dev/mmcblk0p2  /                       ext4    noatime,ro                                   0 0
/dev/mmcblk0p3  none                    swap    sw                                           0 0
/dev/mmcblk0p4  /var/lib/docker         ext4    noatime,rw                                   0 0
tmpfs           /var/log                tmpfs   defaults,noatime,nosuid,mode=0755,size=50m   0 0
tmpfs           /var/log/apache2        tmpfs   defaults,noatime,size=10m                    0 0
tmpfs           /var/lib/sudo           tmpfs   defaults,noatime,nosuid,mode=0755,size=2m    0 0
tmpfs           /tmp                    tmpfs   defaults,noatime,mode=1777,size=30m          0 0

将根分区从ro更改为rw时,docker在重启系统后运行良好。

我如何让它的docker在保持根分区为只读的情况下运行?docker是否还有其他需要写入的文件或目录?

EN

回答 3

Stack Overflow用户

发布于 2020-01-23 17:45:59

我想知道你的mount结果是什么样子的?

我的情况和你的有点不同。在我的例子中,当我在一个根覆盖的文件系统上运行docker守护进程时,我得到了同样的问题。我希望我的解决方案也能帮助您或其他任何人。

根据指南,http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html,docker不能在覆盖支持文件系统上运行。但幸运的是,它可以在覆盖文件系统之上的tmpfs上运行。

下面是我的环境:

  • Ubuntu服务器19.10
  • Raspberry PI 4B
  • 使用overlayroot将根目录覆盖在只读文件系统

我的解决方案是:

启动后的

  1. sudo mount -t tmpfs tmpfs /var/lib/docker (使用sudo systemctl restart docker

的overlayroot)

  • restart坞站可能无法使用编辑的/etc/fstab

如果Step2失败,只需等待几秒钟,然后重试(Step1似乎不会立即生效)。

我还发现,如果重复Step1两次以上,就可以立即执行Step2。抱歉,我不能解释为什么。

票数 1
EN

Stack Overflow用户

发布于 2019-11-10 17:45:52

显然,/run (也称为/var/run)将用于打开套接字文件。Docker是一个系统守护进程,"docker“命令只是将输入发送到套接字文件。基本上,您已经将/var的一些子目录挂载为rw,而不是/var/run。

如果您希望将/var/lib/docker放在持久存储上,那么重新配置docker.service可能是一个更好的主意--可能需要检查您的/etc/sysconfig/docker并将其

代码语言:javascript
复制
DOCKER_OPTS="-g /data/docker"
票数 0
EN

Stack Overflow用户

发布于 2020-10-16 19:55:31

我需要添加以下内容

代码语言:javascript
复制
tmpfs        /var/lib/docker tmpfs   nosuid,nodev         0       0
tmpfs        /var/lib/containerd tmpfs   nosuid,nodev         0       0

添加到/etc/fstab

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58731258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档