我对MongoDB有问题。我正在将config.js
文件中的文件docker-entrypoint-initdb.d
设置为docker-compose
:
mongo:
image: mongo:latest
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
MONGO_INITDB_DATABASE: dev
volumes:
- ./config.js:/docker-entrypoint-initdb.d/config.js
- mongodbdata:/data/db
config.js
文件如下所示:
db.auth('root', 'example');
db = db.getSiblingDB('dev');
db.approver.insert({"email":"some@email.com,"approverType":"APPROVER"});
db.approver.insert({"email":"someother@email.com","approverType":"ACCOUNTANCY"});
当我第一次运行docker-compose up -d
时,一切都很好,这两个条目都插入到数据库中。
但是,我想添加一个trird条目,然后重新创建容器:
db.auth('root', 'example');
db = db.getSiblingDB('dev');
db.approver.insert({"email":"some@email.com,"approverType":"APPROVER"});
db.approver.insert({"email":"someother@email.com","approverType":"ACCOUNTANCY"});
db.approver.insert({"email":"another@email.com","approverType":"ACCOUNTANCY"});
我运行docker-compose up -d --force-recreate --no-deps mongo
没有任何反应。重新创建了容器,但是第三个条目不存在。
运行docker exec -it dev_mongo_1 mongo docker-entrypoint-initdb.d/config.js
返回:
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d44b8e0a-a32c-4da0-a02b-c3f71d6073dd") }
MongoDB server version: 4.0.10
Error: Authentication failed.
是否可以重新创建容器,以便重新运行脚本?还是运行mongo命令,该命令将在正在运行的容器中重新运行脚本?
答案 0 :(得分:0)
在mongodb的启动脚本中,检查是否应进行初始化: https://github.com/docker-library/mongo/blob/40056ae591c1caca88ffbec2a426e4da07e02d57/3.6/docker-entrypoint.sh#L225
# check for a few known paths (to determine whether we've already initialized and should thus skip our initdb scripts)
if [ -n "$shouldPerformInitdb" ]; then
...
因此它可能仅在数据库初始化期间完成了一次,然后,当您使用mongodbdata:/data/db
保持数据库状态时,它将不会初始化。
为解决此问题,您可以尝试键入docker-compose down -v
,这将从数据库中删除数据,并让您再次运行初始化。