Dockerfile,如何安装 snap、snapd:无法识别的服务

Gus*_*usD 9 ubuntu service debian docker dockerfile

嗨,

好吧,我的 Dockerfile 出现了一些问题,实际上我尝试在几乎所有版本的 debian 和 ubuntu 上安装 snapd。

当我尝试启动命令时出现此错误

“错误:无法与服务器通信:发布http://localhost/v2/snaps/rocketchat-server:拨号 unix /run/snapd.socket:连接:没有这样的文件或目录”

因此,我尝试查看该服务是否已启用,并且没有名为 snapd 的服务,即使我尝试以 systemctl“systemctl start snapd”开头,我也遇到错误“无法连接到总线:没有这样的文件或目录”所以我安装了 dbus,当我再次尝试时,我遇到了这个错误

“无法启动 snapd.service:启动助手退出,返回代码未知,为 1”

我尝试使用 service 或 journalctl 启动服务,它显示“snapd: unrecognized service”

当我列出我所有的服务时,我有这个“ [ - ] apparmor

[ - ] bootmisc.sh

[ - ] checkfs.sh

[ - ] checkroot-bootclean.sh

[ - ] checkroot.sh

[ + ] 总线

[ - ] 主机名.sh

[ ? ] hwclock.sh

[ - ] killprocs

[ - ] mountall-bootclean.sh

[ - ] mountall.sh

[ - ] mountdevsubfs.sh

[ - ] mountkernfs.sh

[ - ] mountnfs-bootclean.sh

[ - ] mountnfs.sh

[ ? ] 一经请求

[ - ] 过程

[ - ] rc.local

[ - ] 发送信号

[ + ] udev

[ - ] umountfs

[ - ] umountnfs.sh

[ - ] 卸载根

[ - ] 随机

FROM ubuntu:16.04

RUN apt-get update && apt-get -y upgrade &&\
    apt-get install -y snap snapd

RUN snap install rocketchat-server
#"error: cannot communicate with server: Post #http://localhost/v2/snaps/rocketchat-server: dial unix #/run/snapd.socket: connect: no such file or directory"

RUN snap --version
#snap    2.40
#snapd   unavailable
#series  -

EXPOSE 3000

ENTRYPOINT Server is running .... && tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

我知道用 docker 玩服务不好,但我不知道如何改进我的 dockerfile,我从 Rocketchat doc debian 开始,然后是 ubuntu,然后是 snap(因为它更容易),所有这些我都得到了这个错误。

nic*_*sen 11

首先,您不想安装“snap”包,因为它与“snapd”无关。其次,我偶然发现了在 docker 容器中安装 snapd 的这个问题:TLDR;目前不支持以这种方式运行 snapd。

但是这个问题已经在 snapcraft 论坛上被问到了。snapd 的依赖项之一是 systemd,如果没有重新启动或重新登录,则 snapd 服务无法正确初始化。根据所有发行版的文档,这是必需的过程,但显然不是 docker 中的一个选项。

至少这个悬而未决的问题最能复制你的问题: unable-to-install-snapcraft-snap-in-docker-image-ubuntu-19-10

在这里 snapcraft 论坛上的Evan发布了一种方法,我也无法开始工作。

唯一可行的方法类似于在 docker 中运行 docker,即:

  • 在 docker 主机上安装 snapd
  • 在运行时将 snapd-socket 安装到安装了 snapd 的容器中。

但同样的警告/副作用也适用于运行 docker-in-docker。