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

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

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line