ubuntu Dockerfile,如何安装snap,snapd:未识别服务

68bkxrlz  于 2023-05-16  发布在  Docker
关注(0)|答案(4)|浏览(391)

好吧,我的Dockerfile有一些问题,事实上,我试图在几乎所有版本的Debian和Ubuntu上安装snapd
当我尝试启动一个命令,我得到了这个错误
error: cannot communicate with server: Post http://localhost/v2/snaps/rocketchat-server: dial unix /run/snapd.socket: connect: no such file or directory
所以我试着查看服务是否启用,没有名为snapd的服务,即使我尝试用systemctl systemctl start snapd启动,也会出现错误
Failed to connect to bus: No such file or directory
所以我安装了dbus,当我再次尝试时,我遇到了这个错误
Failed to start snapd.service: Launch helper exited with unknown return code 1
我尝试用service或journalctl启动服务,结果显示
snapd: unrecognized service
当我列出我的所有服务时,我有这个

[ - ]  apparmor

 [ - ]  bootmisc.sh

 [ - ]  checkfs.sh

 [ - ]  checkroot-bootclean.sh

 [ - ]  checkroot.sh

 [ + ]  dbus

 [ - ]  hostname.sh

 [ ? ]  hwclock.sh

 [ - ]  killprocs

 [ - ]  mountall-bootclean.sh

 [ - ]  mountall.sh

 [ - ]  mountdevsubfs.sh

 [ - ]  mountkernfs.sh

 [ - ]  mountnfs-bootclean.sh

 [ - ]  mountnfs.sh

 [ ? ]  ondemand

 [ - ]  procps

 [ - ]  rc.local

 [ - ]  sendsigs

 [ + ]  udev

 [ - ]  umountfs

 [ - ]  umountnfs.sh

[ - ]  umountroot

 [ - ]  urandom
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

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

lg40wkob

lg40wkob1#

首先,你不想安装“snap”包,因为它与“snapd”无关。其次,我自己偶然发现了在docker容器中安装snapd的问题:TLDR;目前不支持以这种方式运行snapd。
但这个问题已经在snapcraft论坛上被问到了。snapd的依赖项之一是systemd,如果不重新启动或重新登录,snapd-service将无法正确初始化。根据所有发行版的文档,这是必需的过程,但显然不是docker中的选项。
至少这个开放性问题最能重复你的问题:unable-to-install-snapcraft-snap-in-docker-image-ubuntu-19-10
Evan at the snapcraft forum here发布了一个方法,我也不能去工作。
唯一可行的方法类似于在docker中运行docker,即:

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

但是同样的warnings/side-effects也适用于运行docker-in-docker。

tjvv9vkg

tjvv9vkg2#

我也遇到了这个问题,但能够在DockerHub上使用EFF的prebuilt Certbot images
FROM certbot/certbot:latest(参见all tags

rdlzhqv9

rdlzhqv93#

我在GCP的容器专用操作系统上遇到了类似的问题。这是它如何为我工作的(基于约瑟夫欲望的回答):
开始之前:

  • 确保DNS指向您的VM外部IP
  • 确保任何人都可以访问端口80
  • 停止容器与您的应用程序,如果它是使用端口80(certbot容器将创建一个http服务器上的端口80)

运行certbot容器:

sudo docker run -it --rm --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            -p 80:80 \
            certbot/certbot certonly

选择选项1,然后输入您的域。(如果能找到一种自动化的方法就好了...)
使用已装载的卷启动容器:

-v "/etc/letsencrypt:/etc/letsencrypt" 
        -v "/var/lib/letsencrypt:/var/lib/letsencrypt"
eivgtgni

eivgtgni4#

如果你使用的是WSL2,你可以通过在/etc/wsl.conf中添加以下代码来解决这个问题:

[boot]
systemd=true

不要忘记使用PowerShell重新启动WSL:

wsl.exe --shutdown
wsl.exe

相关问题