我正在尝试使用Percona图像作为MongoDB在GCE上,但我遇到了一个问题,蒙戈说,挂载路径是只读的。我尽可能多地环顾四周,但我对可能发生的问题感到困惑。
gcloud compute instances create-with-container mongo-svr \
--create-disk name=disk-1,size=1GB \
--container-mount-disk mount-path="/data/mongodb",mode=rw \
--container-image=docker.io/percona/percona-server-mongodb:4.2我使用了上面的命令,它创建了我的实例。然后我将SSH放入服务器,连接到正在运行的mongo实例以关闭,然后运行:docker exec -it [NAME] mongod --configsvr --replSet rs0 --dbpath=/data/mongodb --bind_ip localhost
这将产生一个错误,指出:
CONTROL [initandlisten] options: { net: { bindIp: "localhost" }, replication: { replSet: "rs0" }, sharding: { clusterRole: "configsvr" }, storage: { dbPath: "/data/mongodb" } }
STORAGE [initandlisten] exception in initAndListen: IllegalOperation: Attempted to create a lock file on a read-only directory: /data/mongodb, terminating在这一点上,我一直在用不同的参数重新创建实例,但是到目前为止还没有什么效果。有人知道我错过了什么吗?
更新为命令输出
gcloud compute instances create-with-container mongo-config-f --zone us-central1-f --create-disk name=disk-1,size=1GB --container-mount-disk mount-path="/data/mongodb" --container-image=docker.io/percona/percona-server-mongodb:4.2 --machine-type=f1-micro
WARNING: Default device-name for disk name [disk-1] will be [disk-1] because it is being mounted to a container with [`--container-mount-disk`]
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_NAME]/zones/us-central1-f/instances/mongo-config-f].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
mongo-config-f us-central1-f f1-micro xx.xx.xx.xx xx.xx.xx.xx RUNNING发布于 2020-02-19 16:43:58
我尝试在我的测试项目中复制您的问题,并发现:
bash-4.2美元挂载. /dev/sdb on /data/mongodb类型ext4 (rw,ext4正确地运行VM中的容器;
docker exec -it [NAME] mongod --configsvr --replSet rs0 --dbpath=/data/mongodb --bind_ip localhost时出错的原因是mongodb容器中的权限:$4.2 -l /data/ .drwxr xr-x3根4096Feb 19 15:33 mongodb
作为一种变通的命令可以使用根权限执行。
$ docker exec -it --user root klt-mongo-svr-upd-wowt mongod --configsvr --replSet rs0 --db path=/data/mongodb请找出更多细节和我的步骤如下:
$ gcloud计算实例-用容器创建mongo-svr \-创建-磁盘名称=磁盘-1,size=1GB \-容器-映像docker.io/percona/percona-server-mongodb:4.2 -容器挂载-磁盘挂载-path=“/data/mongodb”警告:磁盘名称的默认设备名称磁盘-1将是磁盘-1,因为它被挂载到使用https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/mongo-svr.创建--container-mount-disk的容器名称区域( MACHINE_TYPE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS mongo-svr-upd欧洲-West3-a N1-标准-1 10.156.0.9 35.XXX.155.XXX运行
$ docker容器ID映像命令创建状态端口名称dfad9c10235d percona/percona mongodb:4.2 "/entrypoint.sh mon…“大约一分钟前上升了大约一分钟-蒙戈-svr-upd-wowt gcr.io/stackdriver-agents/stackdriver-logging-agent:0.2-1.5.33-1-1 bbe02c8e8621 "/entrypoint.sh /usr…“大约一分钟前,堆栈驱动程序-日志代理
此时,一切看起来都很好;
$ docker exec -it klt-mongo-svr-configsvr- rs0 --dbpath=/data/mongodb -bind localhost
并观察到同样的错误:
2020-02-19T15:37:53.176+0000我在initAndListen: IllegalOperation:尝试在只读目录/data/mongodb上创建一个锁文件,终止
此处键为只读目录:容器内的挂载和权限:
$ docker exec -it klt-mongo-mongo-upd /bin/bash 4.2美元挂载. /dev/sdb on /data/mongodb类型ext4 (rw,相对而言)
正如我们所预期的,磁盘是以读写模式创建并挂载到容器中的。
$4.2$ ls -l /data/共计8 drwxr-x4 mongodb根4096 2月19日15:36 db drwxr-x3根4096 Feb 19 15:33 mongodb bash-4.2$
但是要使用permissions;
root root作为根用户运行命令:$ docker exec -it --用户根klt-mongo-svr-upd configsvr--复制rs0 -dbpath=/data/mongodb 2020-02-19T15:45:24.970+0000 i控制主自动禁用为强制启用-sslDisabledProtocols 'none‘2020-02-19T15:45:24.973+0000,我控制并侦听MongoDB启动: pid=119 port=27019 dbpath=/data/mongodb 64位主机=mongo-svr-upd 2020-02-19T15:45:24.974+0000 i控制19T15:45:24.974+0000 i控制initandlisten聆听分配程序: tcmalloc 2020-02-19T15:45:24.974+0000我控制侦听模块:45 2020-02-19T 15:45:24.974+0000我控制initandlisten侦听构建环境:2020-02-19T 15:45:24.975+0000我控制和侦听淀粉: x86_64 2020-02-19T15:45:24.975+0000 I控制initandlisten target_arch: x86_64 2020-02-19T 15:45:24.975+0000控制和收听选项:{ replSet:"rs0“,}切分:{ clusterRole:"configsvr“},存储:{ dbPath:" / data /mongodb”} 2020-02-19T15:45:24.976+0000 I存储,侦听“wiredTiger”存储引擎创建的/data/mongodb中检测到的数据文件,因此将活动存储引擎设置为“wiredTiger”。..。
与根permissions.一起工作的
https://stackoverflow.com/questions/60296841
复制相似问题