Mongodb 命令'/bin/sh-c服务mongod启动和#x27;返回非零代码:docker中的1
我正在尝试创建一个docker映像,在我的Raspberry Pi 3+上运行Mongodb,并使用Raspbian buster。但当我构建映像并运行容器时,mongodb不会自动启动,所以我添加了命令Mongodb 命令'/bin/sh-c服务mongod启动和#x27;返回非零代码:docker中的1,mongodb,docker,Mongodb,Docker,我正在尝试创建一个docker映像,在我的Raspberry Pi 3+上运行Mongodb,并使用Raspbian buster。但当我构建映像并运行容器时,mongodb不会自动启动,所以我添加了命令运行服务mongod start,然后构建映像。Mongodb似乎已安装,我通过服务检查了所有状态,Mongodb已列出但未启动。docker尝试启动mongodb服务时出错:命令'/bin/sh-c service mongod start'返回非零代码:1 这是myDockerfile: F
运行服务mongod start
,然后构建映像。Mongodb似乎已安装,我通过服务检查了所有状态,Mongodb已列出但未启动。docker尝试启动mongodb服务时出错:命令'/bin/sh-c service mongod start'返回非零代码:1
这是myDockerfile:
FROM cretzel/rpi-mongodb
WORKDIR /usr/src/mongodb
RUN chmod +x /var/lib/mongodb
RUN service mongod start
EXPOSE 27017
CMD ["mongod"]
FROM cretzel/rpi-mongodb
WORKDIR /usr/src/mongodb
COPY ./entrypoint.sh .
RUN chmod +x ./entrypoint.sh
VOLUME ./database /data/db
EXPOSE 27017
CMD ["mongod"]
我试图修复这个问题,但被告知它没有权限,所以我将runchmod+x/var/lib/mongodb
添加到我的dockerfile中,但它不起作用
有人能帮忙吗
----------------更新自@adii的答案-----------------------------------
我的新dockerfile:
FROM cretzel/rpi-mongodb
WORKDIR /usr/src/mongodb
RUN chmod +x /var/lib/mongodb
RUN service mongod start
EXPOSE 27017
CMD ["mongod"]
FROM cretzel/rpi-mongodb
WORKDIR /usr/src/mongodb
COPY ./entrypoint.sh .
RUN chmod +x ./entrypoint.sh
VOLUME ./database /data/db
EXPOSE 27017
CMD ["mongod"]
entrypoint.sh
#!/bin/bash
service mongod start
exec "$@"
更改解决了我的错误,但mongodb服务仍然无法启动。这是一个日志文件:
Starting database: mongodb failed!
db level locking enabled: 1
mongod --help for help and startup options
Mon Nov 11 16:31:15
Mon Nov 11 16:31:15 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Mon Nov 11 16:31:15
warning: some regex utf8 things will not work. pcre build doesn't have --enable-unicode-properties
Mon Nov 11 16:31:15 [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db/ 32-bit host=38271f34412b
Mon Nov 11 16:31:15 [initandlisten]
Mon Nov 11 16:31:15 [initandlisten] ** NOTE: This is a development version (2.1.1-pre-) of MongoDB.
Mon Nov 11 16:31:15 [initandlisten] ** Not recommended for production.
Mon Nov 11 16:31:15 [initandlisten]
Mon Nov 11 16:31:15 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Mon Nov 11 16:31:15 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations
Mon Nov 11 16:31:15 [initandlisten] ** with --journal, the limit is lower
Mon Nov 11 16:31:15 [initandlisten]
Mon Nov 11 16:31:15 [initandlisten] db version v2.1.1-pre-, pdfile version 4.5
Mon Nov 11 16:31:15 [initandlisten] git version: 47fbbdceb21fc2b791d22db7f01792500647daa9
Mon Nov 11 16:31:15 [initandlisten] build info: Linux raspberrypi 3.2.27+ #102 PREEMPT Sat Sep 1 01:00:50 BST 2012 armv6l BOOST_LIB_VERSION=1_49
Mon Nov 11 16:31:15 [initandlisten] options: {}
Mon Nov 11 16:31:15 [initandlisten] waiting for connections on port 27017
Mon Nov 11 16:31:15 [websvr] admin web console waiting for connections on port 28017
Mon Nov 11 16:32:15 [clientcursormon] mem (MB) res:20 virt:83 mapped:0
我不太了解Docker,它没有显示任何错误。请帮忙 您不应在RUN
命令处启动进程,每个RUN命令在单独的shell中运行,RUN
用于安装和配置,而不是启动进程。要在容器中启动进程,需要在entrypoint
或CMD
处启动进程
此外,容器需要在前台运行一个进程,这样在容器的情况下服务将无法工作。所以
EXPOSE 27017
CMD ["mongod"]
这足以启动mongo进程,如果容器已启动并正在运行,则意味着mongod进程正在运行,您不需要使用service--status all
检查状态。MongoDB进程一结束,容器就会自动结束
建议您使用谢谢您的回答。我添加了entrypoint.sh,它看起来很有效。但是出现了另一个错误。导致错误的时间很长,所以我更新了这个问题。我使用的是raspbian buster,所以官方mongo不适合32位操作系统。