mongodb 容器启动失败,出现错误:非法操作:试图在只读目录 /data/db 上创建锁定文件,正在终止



mongodb docker 容器启动失败,出现错误: 非法操作: 试图在只读目录上创建锁定文件:/data/db, 终止

我使用官方的mongodb Dockerfile来构建容器,并使用docker-compose来启动它。

这是我的 Dockerfile:

FROM ubuntu:bionic
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN  echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list 
&& echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
&& echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list 
&& echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
RUN export all_proxy=http:192.168.1.177:1080
RUN set -eux; 
apt-get update; 
apt-get install -y --no-install-recommends 
ca-certificates 
jq 
numactl 
; 
if ! command -v ps > /dev/null; then 
apt-get install -y --no-install-recommends procps; 
fi; 
rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root (https://github.com/tianon/gosu/releases)
ENV GOSU_VERSION 1.11
# grab "js-yaml" for parsing mongod's YAML config files (https://github.com/nodeca/js-yaml/releases)
ENV JSYAML_VERSION 3.13.0
RUN mkdir ~/.gnupg && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf
RUN set -ex; 

apt-get update; 
apt-get install -y --no-install-recommends 
wget 
; 
if ! command -v gpg > /dev/null; then 
apt-get install -y --no-install-recommends gnupg dirmngr; 
fi; 
rm -rf /var/lib/apt/lists/*; 

dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; 
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; 
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; 
export GNUPGHOME="$(mktemp -d)"; 
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; 
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; 
command -v gpgconf && gpgconf --kill all || :; 
rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; 
chmod +x /usr/local/bin/gosu; 
gosu --version; 
gosu nobody true; 

wget -O /js-yaml.js "https://github.com/nodeca/js-yaml/raw/${JSYAML_VERSION}/dist/js-yaml.js"; 
# TODO some sort of download verification here

apt-get purge -y --auto-remove wget
RUN mkdir /docker-entrypoint-initdb.d
ENV GPG_KEYS E162F504A20CDF15827F718D4B7C549A058F8B6B
RUN set -ex; 
export GNUPGHOME="$(mktemp -d)"; 
for key in $GPG_KEYS; do 
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; 
done; 
gpg --batch --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg; 
command -v gpgconf && gpgconf --kill all || :; 
rm -r "$GNUPGHOME"; 
apt-key list
# Allow build-time overrides (eg. to build image with MongoDB Enterprise version)
# Options for MONGO_PACKAGE: mongodb-org OR mongodb-enterprise
# Options for MONGO_REPO: repo.mongodb.org OR repo.mongodb.com
# Example: docker build --build-arg MONGO_PACKAGE=mongodb-enterprise --build-arg MONGO_REPO=repo.mongodb.com .
ARG MONGO_PACKAGE=mongodb-org-unstable
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 4.1
ENV MONGO_VERSION 4.1.10
# bashbrew-architectures:amd64 arm64v8 s390x
RUN echo "deb http://$MONGO_REPO/apt/ubuntu bionic/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR multiverse" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN set -x 
&& apt-get update 
&& apt-get install -y 
${MONGO_PACKAGE}=$MONGO_VERSION 
${MONGO_PACKAGE}-server=$MONGO_VERSION 
${MONGO_PACKAGE}-shell=$MONGO_VERSION 
${MONGO_PACKAGE}-mongos=$MONGO_VERSION 
${MONGO_PACKAGE}-tools=$MONGO_VERSION 
&& rm -rf /var/lib/apt/lists/* 
&& rm -rf /var/lib/mongodb 
&& mv /etc/mongod.conf /etc/mongod.conf.orig
RUN mkdir -p /data/db /data/configdb 
&& chown -R mongodb:mongodb /data/db /data/configdb 
&& chmod g+w -R /data/db 
&& chmod g+w -R /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]

和下面的 docker 组合:

mongodb:
build: ./dockerfiles/mongodb
volumes:
- ./data/mongodb/db:/data/db
- ./data/mongodb/configdb:/data/configdb
ports:
- 7017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=super
- MONGO_INITDB_ROOT_PASSWORD=123456
restart: always

我希望容器成功启动。但是我失败了:非法操作:试图在只读目录上创建一个锁定文件:/data/db,终止

如果我删除卷部分,它可以工作! 主机是 ubuntu18.04,/data 是可写的!

我已经解决了我的问题 le 老铁!

因为我使用vmware启动Ubuntu服务器,并与Windows 7共享一个文件夹。共享文件夹上的容器卷。

检查 MongoDB 容器的检查信息。

"Mounts": [
{
"Type": "bind",
"Source": "/mnt/hgfs/ubuntu/dockers/data/mongodb/configdb",
"Destination": "/data/configdb",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/mnt/hgfs/ubuntu/dockers/data/mongodb/db",
"Destination": "/data/db",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],

源代码包含字符串"/mnt/hgfs/ubuntu"告诉我们:它共享文件夹!

相关内容

最新更新