流浪用户即使使用sudo也没有root权限?

时间:2018-08-12 17:34:30

标签: docker vagrant

免责声明:我正在寻找编程的解决方案。即vagrant up,并且在最终用户的计算机上无需任何特殊配置即可正常运行。换句话说,所有配置都应由我自己完成,例如Vagrantfile,docker-compose,配置脚本等。


更新:我相信,我找到了这个问题的更原始的体现。如果我mkdir somedir,我将得到用户拥有的目录。如果然后sudo mkdir someotherdir,则它是root用户拥有的。但是在vagrant ssh内,相同的两个命令始终给出由vagrant拥有的目录,并且从不根目录。如何解决呢?


我正在尝试使nextcloud / nginx / mariadb / redis安排与每个服务一起运行在其自己的Docker容器中。整个内容都应包含在通过Vagrant设置的虚拟机中。

这是我的项目目录(位于主文件夹中的某个位置):

-Vagrantfile
-bootstrap.sh
-nextc/
|-docker-compose.yml
|-nginx.conf

如果我进入nextc/并运行docker-compose up,则会在项目目录的根目录中创建一个名为persist的目录(有关详细信息,请参见下面的撰写文件)。

ls -l

...
drwxr-xr-x 5 root     root      4096 авг 12 19:06 persist
...

persist包含所有有状态的内容,例如nextcloud的配置,数据库文件,并且是由于以下docker compose文件而创建的:

version: '2.3'

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - ../persist/db/:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_ALLOW_EMPTY_PASSWORD=true

  redis:
    image: redis
    volumes: 
      - ../persist/redis/:/data
    expose: 
      - 6379
    restart: always

  app:
    image: nextcloud:fpm
    links:
      - db
      - redis
    volumes:
      - ../persist/nextcloud/:/var/www/html
    restart: always

  web:
    image: nginx
    ports:
      - "8081:80"
    links:
      - app
      - redis
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    volumes_from:
      - app
    restart: always

重要的是,它被创建为属于root用户,而其中的某些子目录属于www-data或root。一切正常,我可以通过localhost:8081访问nextcloud。

接下来,我按照以下步骤设置Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network "forwarded_port", guest: 8081, host: 8080
end

bootstrap.sh

#!/bin/bash

sudo apt-get update

sudo apt-get install -y \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg > key
sudo apt-key add - < key
rm key

sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable"

sudo apt-get update

sudo apt-get install -y docker-ce

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

cd /vagrant/nextc

sudo docker-compose up -d

由于这无法按预期工作,因此我进入了无所事事的机器,并查看了docker-compose up的输出。

有人MariaDB抱怨:许多错误消息,例如

chown: changing ownership of '/var/lib/mysql/ib_logfile0': Operation not permitted

mkdir cannot create directory '/var/lib/mysql//mysql' permission denied

创建的persist目录不是属于root,而是属于Vagrant(在VM内部查看)或属于我的用户(从主机看到)。显然,这似乎是某种权限问题。

如何确保Vagrant与主机的工作原理相同?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并使用无用的重载来修复它,我不知道是什么原因造成的,但是它对我却发生过几次。