Dockerfile,如何安装 snap,snapd:无法识别的服务
Dockerfile, how install snap, snapd: unrecognized service
好吧,我的 Dockerfile 出现了一些问题,实际上我尝试在 Debian 上安装 snapd
并在几乎所有版本中安装 Ubuntu。
当我尝试启动命令时出现此错误
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 (因为它更容易),并且所有这些我都得到了这个错误。
首先,您不想安装“snap”软件包,因为它与“snapd”无关。
其次,我自己偶然发现了在 docker 容器中安装 snapd 的问题:
TLDR; 运行 目前不支持这种方式的快照。
但是这个问题已经在 snapcraft 论坛上被问过了。
snapd 的依赖项之一是 systemd,如果不重新启动或重新登录,snapd 服务将无法正确初始化。根据所有发行版的文档,这是必需的程序,但显然不是 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.
我 运行 也遇到过这个问题,但是能够在 DockerHub
上使用 EFF prebuilt Certbot images
FROM certbot/certbot:latest
(参见all tags)
我在 GCP 的容器专用 os 上遇到了类似的问题。
这就是我的工作方式(基于 Joseph Lust 的回复):
开始之前:
- 确保 DNS 指向您的 VM 外部 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
Select 选项 1 然后输入您的域。 (如果能找到一种自动化方法就好了...)
启动您的容器并安装以下卷:
-v "/etc/letsencrypt:/etc/letsencrypt"
-v "/var/lib/letsencrypt:/var/lib/letsencrypt"
好吧,我的 Dockerfile 出现了一些问题,实际上我尝试在 Debian 上安装 snapd
并在几乎所有版本中安装 Ubuntu。
当我尝试启动命令时出现此错误
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 (因为它更容易),并且所有这些我都得到了这个错误。
首先,您不想安装“snap”软件包,因为它与“snapd”无关。 其次,我自己偶然发现了在 docker 容器中安装 snapd 的问题: TLDR; 运行 目前不支持这种方式的快照。
但是这个问题已经在 snapcraft 论坛上被问过了。 snapd 的依赖项之一是 systemd,如果不重新启动或重新登录,snapd 服务将无法正确初始化。根据所有发行版的文档,这是必需的程序,但显然不是 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.
我 运行 也遇到过这个问题,但是能够在 DockerHub
上使用 EFF prebuilt Certbot imagesFROM certbot/certbot:latest
(参见all tags)
我在 GCP 的容器专用 os 上遇到了类似的问题。 这就是我的工作方式(基于 Joseph Lust 的回复):
开始之前:
- 确保 DNS 指向您的 VM 外部 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
Select 选项 1 然后输入您的域。 (如果能找到一种自动化方法就好了...)
启动您的容器并安装以下卷:
-v "/etc/letsencrypt:/etc/letsencrypt"
-v "/var/lib/letsencrypt:/var/lib/letsencrypt"