Dockerfile,如何安装快照,如何快照:无法识别的服务

时间:2019-10-14 23:41:29

标签: docker ubuntu service debian 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启动服务,并且显示 “快照:无法识别的服务”

当我列出所有服务时,我都有这个 ”  [-]装甲

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

[? ]按需

[-]过程

[-] rc.local

[-] sendigs

[+] 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,我先从robotschat doc debian开始,然后是ubuntu,然后按一下(因为它更容易),所有这些我都得到了这个错误。

3 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,但能够在 DockerHub 上使用 EFF 的 prebuilt Certbot images

FROM certbot/certbot:latest(见all tags

答案 1 :(得分:0)

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

但是这个问题已经在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,即:

  • 在Snapshot主机上安装快照
  • 在运行时将卡扣插槽安装到已安装卡扣的容器中。

但相同的warnings/side-effects apply as they do to running docker-in-docker

答案 2 :(得分:0)

我在 GCP 的容器专用操作系统上遇到了类似的问题。 这就是它对我的工作方式(基于 Joseph Lust 的回复):

开始之前:

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

运行 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"