Docker - mkdir只读文件系统

Jam*_*ton 18 ubuntu docker

刚刚安装Ubuntu 18后,我在尝试启动一个绑定到LVM(ext4)分区的docker容器时收到以下错误:

mkdir /storage: read-only file system
Run Code Online (Sandbox Code Playgroud)

我已经尝试重新安装操作系统,重新安装Docker并强制驱动器作为RW安装(所有不是docker的东西都可以写入驱动器).

正在绑定的目录当前设置为777权限.

似乎几乎没有可用于此错误的信息.

小智 46

我有同样的问题,但从快照移除了docker并重新安装在官方docker步骤之后.

从快照中删除docker

snap remove docker
Run Code Online (Sandbox Code Playgroud)

然后删除docker目录和旧版本

rm -R /var/lib/docker

sudo apt-get remove docker docker-engine docker.io
Run Code Online (Sandbox Code Playgroud)

安装官方docker:https://docs.docker.com/install/linux/docker-ce/ubuntu/

希望对你有所帮助!

  • 这个答案应该被接受,因为它为我解决了这个问题。 (5认同)
  • 所以基本上,如果你只是“遵循”ubuntu 建议如何安装 docker,你最终会得到完全无法使用的 docker 安装吗?凉爽的... (4认同)

ber*_*rto 7

2021 年 1 月更新:虽然仍然很酷,但 Snaps 并不总是有效。特别是对于 Docker Snap,它不适用于 Swarm 模式,所以我放弃了它并按照推荐的方式安装了 Docker

Snaps 实际上很酷,IMO,并且认为在 Snap 中运行 Docker 比直接在系统上安装它更有益。您收到只读权限错误这一事实是一件好事。这意味着流氓容器无法对您的基本操作系统造成严重破坏。也就是说,如何解决您的问题。

出现这种情况的原因是 Snaps 将主机操作系统公开为只读,以便 Docker 可以看到主机的文件,但不能修改它们(因此出现权限被拒绝错误)。 但是有一个 Docker Snap 可以写入的目录:/var/snap/docker. 实际上,snap 可以写入的更好的目录是/home. 我/home/docker为容器创建了来自主机系统的持久存储。

在您的情况下,您希望/storageDocker 容器可写。我有一个非常相似的用例,这让我看到了这篇 SO 帖子。我通过在docker snap 目录中 安装我的存储解决了这个问题/home/docker;最简单的示例只是同一文件系统上的目录:

mkdir -p /home/docker/<container name>/data
Run Code Online (Sandbox Code Playgroud)

就我而言,我在上面的位置创建了一个 ZFS 数据集,而不是简单地创建mkdir一个目录。

然后,我运行的容器可以使用以下内容写入:

docker run -ti -v /home/docker/<container name>/data:/data [...]
Run Code Online (Sandbox Code Playgroud)

现在您拥有两全其美的优势:在包含的 Snap 环境和持久存储中运行的 Docker。