如何完全删除一个Snap应用程序(Docker)

39
我曾经错误地使用Snap安装Docker... 当我意识到Snap没有在我的工作目录(位于不同分区上)中运行的权限时,我将其卸载。现在我通过apt-get安装了Docker后无法使用它。
请帮我解决问题。
我已经运行了“sudo snap remove docker”,但当我运行“sudo apt install docker”并通过“docker”命令运行时,出现“bash:/snap/bin/docker:没有那个文件或目录”的提示。
5个回答

15

我有同样的问题。这个对我有效。

sudo snap remove docker

sudo reboot 

重点是重新启动实例或终端。
我希望这个方法能够有所帮助。

12
在我的情况下,sudo snap remove docker --purge 非常有帮助,可以避免在删除过程中进行快照,从而节省大量时间。 - jorgeca

11
您要查找的命令是:
sudo apt install docker.io

即,它是 docker.io 而不仅仅是 docker

在Ubuntu上,软件包docker被描述为“KDE3/GNOME2应用程序的系统托盘”,这可能不是您想要的!


2
或者 sudo apt install docker-ce - 关于差异,请参考此问题 - not2savvy

5

我也遇到了同样的问题,只需重启实例即可解决。


5
甚至只需重新启动终端即可。 - Michael Millar
2
@MWMillar 没错。这纯粹是可执行文件位置缓存的问题 - 这是 bash 中非常普遍的问题,与 docker 无关,在该问题中,即使之前找到了可执行文件(尽管仍在 PATH 中),但它们不在目录中。我添加了一个更详细的答案。 - alani

3
我遇到了同样的问题。Snap安装限制了权限,请参考https://snapcraft.io/install/docker/ubuntu的第一个要点 - 这可能是出于良好的安全原因,因为Docker可以提供无限制的root权限...)。
首先,使用sudo snap remove docker --purge来卸载它(来自@jorgeca的评论)。
其次,按照官方安装指南进行操作。
### remove any previously installed docker remnants
sudo apt-get remove docker docker-engine docker.io containerd runc

### install ca-certificates
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg

### install docker certs
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

### setup docker repo
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

### install docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

### test installation
sudo docker run hello-world

我还进行了以下测试 - 安装绑定一个不在$HOME目录下的卷。这将导致snap安装的docker报错,说文件系统是只读的。
sudo mkdir /test
sudo docker run -v /test:/test hello-world
sudo rmdir /test

2
问题就在于,您的“bash” shell已经缓存了已知可执行文件的位置,以避免每次输入命令时都扫描可执行文件搜索路径(即“$PATH”中列出的目录)。因为您已经从一个目录(“/snap/bin”)中删除了可执行文件并将其添加到另一个目录(“/usr/bin”)中,所以这个缓存现在已经过时。这意味着,如果您尝试仅通过键入“docker”而不是其完整路径来调用可执行文件,则它会在错误的位置查找。
您可以通过启动一个新的“bash” shell来轻松解决它,例如打开一个新的终端窗口并在其中输入命令。
或者,如果您希望刷新您已经使用的终端会话中的缓存,请输入:
hash -r

不必重启计算机(尽管这也可以起作用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接