dokin1975 2023-11-22 18:58 采纳率: 50%
浏览 52
已结题

[Docker]docker-compose权限问题

问题遇到的现象和发生背景

启动docker服务, 启动文件docker-compose.yml位于/a, 当前目录是/a,当前用户是ubuntu

无论执行以下任一命令,都遇到相同的问题:
docker-compose up -d
sudo docker-compose up -d
docker-compose -f docker-compose.yml up -d
sudo docker-compose -f docker-compose.yml up -d

错误信息:
open /var/lib/snapd/void/docker-compose.yml: permission denied

两个问题:
1)我在/a目录下执行docker-compose命令,系统为什么会指向/var/lib/snapd/void/docker-compose.yml文件?
2)我已经给/var/lib/snapd/void/docker-compose.yml赋予了所有权限,还是有上述问题,为什么?

操作环境、软件版本等信息

ubuntu:v18.04.1
docker:20.10.24
docker-compose:2.17.2

尝试过的解决方法

A. ubuntu用户

  1. 把用户ubuntu加入组docker
  2. 复制docker-compose.yml文件到/var/lib/snapd/void目录下
  3. 赋予该文件所有权限

-rwxrwxrwx 1 ubuntu ubuntu 3227 Nov 22 06:59 /var/lib/snapd/void/docker-compose.yml
4. 确认当前用户ubuntu对/var/lib/snapd/void目录有访问权限

B. root用户
把以上步骤对root用户重新做了一遍,遇到相同的问题,还是:
open /var/lib/snapd/void/docker-compose.yml: permission denied

我想要达到的结果

按照docker-compose.yml文件成功启动服务

  • 写回答

8条回答 默认 最新

  • 小正太浩二 2023-11-22 23:11
    关注

    看起来问题可能与Snapd有关,Snapd是一种用于管理和运行Snaps的系统服务。Snaps是一种打包的软件格式,提供了软件的自包含性和安全性。在Snapd中,每个Snap都有其自己的挂载点,可能会导致在运行docker-compose时引用了错误的文件。

    解决此问题的方法可能是确保docker-compose命令引用的是正确的文件,并且Snapd没有引入混淆。以下是一些可能的步骤:

    1.检查docker-compose路径:
    在执行docker-compose命令之前,可以先打印docker-compose文件的路径,确保它是你期望的路径。可以使用以下命令:

    echo $(pwd)/docker-compose.yml
    
    
    

    这将打印当前目录下docker-compose.yml的绝对路径。确保docker-compose命令引用的是正确的文件。

    2.避免Snapd的影响:
    Snapd可能会引入路径的问题,因此你可以尝试禁用Snapd对docker-compose的影响。可以使用以下命令:

    sudo snap disable docker
    
    
    

    这会禁用Snapd中的Docker,你可以再次尝试执行docker-compose。

    3.避免Snapd的影响(备用方法):
    如果禁用Snapd Docker仍然无法解决问题,可以考虑卸载Snapd Docker,然后使用官方的Docker安装。可以使用以下命令:

    sudo snap remove docker
    
    
    

    然后按照官方Docker文档安装Docker。

    4.检查文件权限:
    你已经检查了文件的权限,确保docker-compose.yml对于执行用户是可读的。另外,请确保文件的目录也对执行用户是可访问的。

    5.完全路径启动docker-compose:
    在docker-compose命令中使用完整的路径,确保它引用的是正确的文件。例如:

    sudo docker-compose -f /a/docker-compose.yml up -d
    
    
    

    请注意,如果你决定禁用或卸载Snapd Docker,你需要确保你的其他应用程序和系统不依赖于Snapd Docker。在执行此类更改之前,请确保了解系统上已安装的Snapd软件包,并确保不会破坏其他依赖关系。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月22日