免责声明:我正在寻找编程的解决方案。即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与主机的工作原理相同?
答案 0 :(得分:0)
我遇到了同样的问题,并使用无用的重载来修复它,我不知道是什么原因造成的,但是它对我却发生过几次。