好吧,我的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(因为它更容易),所有这些我都得到了这个错误。
4条答案
按热度按时间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,即:
但是同样的warnings/side-effects也适用于运行docker-in-docker。
tjvv9vkg2#
我也遇到了这个问题,但能够在DockerHub上使用EFF的prebuilt Certbot images
FROM certbot/certbot:latest
(参见all tags)rdlzhqv93#
我在GCP的容器专用操作系统上遇到了类似的问题。这是它如何为我工作的(基于约瑟夫欲望的回答):
开始之前:
运行certbot容器:
选择选项1,然后输入您的域。(如果能找到一种自动化的方法就好了...)
使用已装载的卷启动容器:
eivgtgni4#
如果你使用的是WSL2,你可以通过在
/etc/wsl.conf
中添加以下代码来解决这个问题:不要忘记使用PowerShell重新启动WSL: