【问题标题】:Run docker in ubuntu live disk在 ubuntu live disk 中运行 docker
【发布时间】:2015-05-14 22:53:27
【问题描述】:

我想知道是否可以在 Ubuntu 14.04 USB Live-Disk 中安装和运行 Docker。

我正在尝试使用 8GB USB、4 GB 用于安装和 4 GB 用于持久存储,但在运行容器时我不断收到错误(拉它们没问题)。

这是我的 Docker 版本:

$ sudo docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64

我在运行 docker 容器时遇到的当前错误是:

[8] System error: mountpoint for cpu not found 

OBS:有时错误是 cpusetdevices 未找到。

我正在使用的 live-disk 的内核是:

$ uname -r
3.13.0-32-generic

如果 Ubuntu live 磁盘不是运行 Docker 的最佳 live-disk,是否有任何其他具有 GUI 的替代品,而不仅仅是运行 docker 的简单终端?

我这样说是因为我想向我父母介绍 Docker,但他们不想在他们的 PC 上安装 linux,所以我需要一些简单的图形界面来写下 Dockerfile,打开一个浏览器等...


更新

我看到在安装过程中设置 cgroup-lite 依赖项initctl: Unknown job: cgroup-lite 时出错。另外我读到一些 ubuntu 需要安装 apparmor 以便 docker 安装正常工作。

所以我安装了它并重新安装了 docker(当时安装 cgroup-lite 没有问题),现在我在运行 sudo docker -d 时得到了这个

INFO[0000] +job serveapi(unix:///var/run/docker.sock)   
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
INFO[0000] +job init_networkdriver()                    
INFO[0000] -job init_networkdriver() = OK (0)           
WARN[0004] Your kernel does not support cgroup swap limit. 
INFO[0004] Loading containers: start.                   
......
INFO[0004] Loading containers: done.                    
INFO[0004] docker daemon: 1.6.2 7c8fca2; execdriver: native-0.2; graphdriver: aufs 
INFO[0004] +job acceptconnections()                     
INFO[0004] -job acceptconnections() = OK (0)            
INFO[0004] Daemon has completed initialization 

当尝试运行我收到的容器时>

ERRO[0125] HTTP Error: statusCode=500 Cannot start container 90875e79dec37cec41a67aac235b81f0fc17c4e011cd6e5368a4b29336587f5b: 
[8] System error: permission denied

不确定内核不支持 cgroup,但如果支持,那么是否可以更新 livedisk 中的内核(持久化?)?

【问题讨论】:

标签: linux ubuntu docker


【解决方案1】:

更简单的现代方法

以下内容在 Ubuntu 14.04 中不起作用,但在 20.0418.0416.04 中起作用。

先决条件:在 LiveUSB 上安装 Docker

如果您尚未安装 Docker,请启动终端并粘贴以下命令。

# docker.io is in the "universe" repository, so add it.
sudo add-apt-repository universe

# Only necessary in 16.04, but doesn't hurt anything.
sudo apt-get update

# Install Ubuntu's Docker package
sudo apt-get install -y docker.io

解决办法:

这里我们使用/etc/docker/daemon.json配置文件来更改存储驱动。

在终端中粘贴以下命令:

# Create a config file to set the storage driver to "Device Mapper"
echo '{ "storage-driver": "devicemapper" }' | sudo tee -a /etc/docker/daemon.json > /dev/null

# Restart the Docker service
sudo service docker restart

测试

现在我可以使用命令成功运行 Ubuntu 容器

sudo docker run --rm -it ubuntu

未来的坏消息

很遗憾,我不确定这种方法还能支持多久。运行 sudo docker info 我看到以下弃用警告:

WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future
release.

【讨论】:

  • 还没有尝试过在 live usb 磁盘中运行新版本的 docker,但是您知道新的 overlay2 存储驱动器是否可以直接与 live usb 一起使用?从我正在阅读的内容来看,这似乎是新的默认驱动程序而不是 AUFS 如果它可以与它一起使用,那么仅使用最新的 docker 版本可能是解决问题的最佳方法
  • 我同意,但 live USB 似乎已经安装为覆盖,覆盖和覆盖 2 都不适合我。也许可以通过一些修补来实现,但乍一看,它看起来并不乐观。
  • 此解决方案适用于我在 SSD 上的 Ubuntu 20.04 Live。
【解决方案2】:

我设法通过将 Docker 存储更改为 devicemapper 而不是 AUFS 来完成这项工作。

如果您的系统不使用 Systemd

您只需更改/etc/default/docker 即可:

DOCKER_OPTS="--storage-driver=devicemapper"

如果您的系统使用 Systemd

请参阅this answer 并在 docker start 命令末尾添加--storage-driver=devicemapper

我已经设法让容器运行正常,但我更喜欢使用 AUFS。

我意识到分区默认没有使用aufs,而是cawcow之类的东西(现在不记得了)。

我还尝试使用 AUFS 在 grub 中使用 union=aufs 标志使其工作,但是在运行 docker 守护程序时,我得到一个 FATA[0000] Shutting down daemon due to errors: error intializing graphdriver: backing file system is unsupported for this graph driver,它看起来与 https://github.com/docker/docker/issues/7321 相关

我将在此处留下我的答案,因为这是解决此问题的一种解决方法,但是如果有人设法使用 AUFS 来完成这项工作,我认为这将是一个更好的答案。

【讨论】:

  • 菜鸟问题,你如何检查你的分区使用的是什么?
【解决方案3】:

我在 Debian Live 系统上遇到了类似的问题。对于最新的 docker,更改 /etc/default/docker 并没有做任何更改。

--storage-driver=vfs 附加到/lib/systemd/system/docker.service 对我有帮助:

...
ExecStart=/usr/bin/dockerd --storage-driver=vfs -H fd://
...

vfs 可能性能不佳,但 aufsoverlay2devicemapper 对我来说无法正常工作。)

【讨论】:

    【解决方案4】:

    您想告诉 Docker 守护程序将与您的容器相关的数据存储在持久性存储中。

    默认情况下,docker 守护进程将这些数据放入/var/lib/docker。您可以使用--graph docker daemon option 更改该位置

    【讨论】:

    • 实际上活动磁盘中的根分区已经是持久的(我正在启动它,在 grub 中设置了persistent 标志)。我知道这是因为 /var/lib/docker 中的任何更改都会持久存在(如果我拉取图像,它会在我重新启动时保留在那里,或者如果我更改 /etc/default/docker 中的选项,它也会持久存在。
    【解决方案5】:

    我遇到了类似的问题,但使用的是 Ubuntu 16.04。我实际上做了什么让它运行

    1) 我在 ubuntu live 上安装了 docker

        sudo apt-get update
    
        sudo apt-get install \
          apt-transport-https \
          ca-certificates \
          curl \
          gnupg-agent \
    
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
          software-properties-common
    
        sudo apt-key fingerprint 0EBFCD88
    
        sudo add-apt-repository \
           "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
           $(lsb_release -cs) \
           stable"
    
        sudo apt-get update
    
        sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    2) 一旦 docker 安装在 ubuntu live 上。您需要使用

    停止 docker
        sudo service docker stop
    

    3) 然后使用

    编辑 /lib/systemd/system/docker.service 上的文件
        sudo gedit /lib/systemd/system/docker.service
    

    通过替换这一行

        ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd  /containerd.sock
    

    用这条线

        ExecStart=/usr/bin/dockerd -g /media/ubuntu/something -H fd:// --containerd=/run/containerd  /containerd.sock
    

    所以基本上我们所做的就是添加 -g /media/ubuntu/something,这是将替换 docker 的 ROOT DIR 的驱动程序。请注意,如果驱动程序是 NTFS,这将不起作用。您需要将驱动程序设置为 ext4 或 FAT。

    4) 完成后,重新加载守护进程

        sudo systemctl daemon-reload
    

    5) 重启docker服务

        sudo service docker restart
    

    6) 通过运行检查 ROOT DIR 是否已更改

        sudo docker info
    

    您应该在那里看到新目录。 毕竟,这非常酷,因为您可以拥有可移植的图像和容器,并且只需执行上述操作,您就可以在任何 ubuntu 机器上运行它们。我还没有在 Windows 上测试过这个,但无论如何,使用 docker 和 windows 对我来说总是很痛苦。

    【讨论】:

    • 嗨@Mohanad Y。我想在ubuntu live usb上设置docker。但我希望将 docker 文件保存在我的 MacBook 的 ssd 驱动器上,而不是实时 USB 的持久存储上。你碰巧知道我是怎么做到的吗?谢谢:)
    • 嗨@sorabh.v6。 docker 文件可以在您机器上的任何位置(这是您用来构建 docker 映像的文件)。唯一重要的是 docker 镜像和容器的存储位置,在本例中是 DOCKER ROOT。此 ROOT 目录不得为 NTFS 格式。
    • 所以,这意味着我可以存储 .raw 文件,其中 docker 容器存储在我的 macbooks 存储中,对吗?因为macbook分区不是ntfs,它的apfs
    • docker 容器的存储由 ROOT DIR 控制。因此,如果您将 ROOT DIR 更改为不是 NTFS 的 macbook 分区的位置应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多