码头工人的新手,所以请耐心等待。
我的Dockerfile包含一个ENTRYPOINT:
ENV MONGOD_START "mongod --fork --logpath /var/log/mongodb.log --logappend --smallfiles"
ENTRYPOINT ["/bin/sh", "-c", "$MONGOD_START"]
我有一个shell脚本通过python脚本向数据库添加一个条目,然后启动服务器。
脚本 startApp.sh
chmod +x /addAddress.py
python /addAddress.py $1
cd /myapp/webapp
grunt serve --force
现在,以下所有RUN命令都不能成功执行此脚本。
sudo docker run -it --privileged myApp -C /bin/bash && /myApp/webapp/startApp.sh loc
sudo docker run -it --privileged myApp /myApp/webapp/startApp.sh loc
容器的泊坞窗日志是
"about to fork child process, waiting until server is ready for connections. forked process: 7 child process started successfully, parent exiting "
此外,当我在docker中打开bash提示并运行它时,startApp.sh执行正常。
我无法弄清楚我在做什么,请帮助。
答案 0 :(得分:0)
我想(我可能错了,因为我既不是MongoDB也不是Docker专家),mongod --fork
和/bin/sh -c
的组合是罪魁祸首。
您实际执行的是:
/bin/sh -c mongod --fork ...
其中
最简单的修复可能就是使用
CMD ["mongod"]
答案 1 :(得分:0)
我建议你创建一个 entrypoint.sh 文件:
#!/bin/sh
# Initialize start DB command
# Pick from env variable MONGOD_START if it exists
# else use the default value provided in quotes
START_DB=${MONGOD_START:-"mongod --fork --logpath /var/log/mongodb.log --logappend --smallfiles"}
# This will start your DB in background
${START_DB} &
# Go to startApp directory and execute commands
`chmod +x /addAddress.py;python /addAddress.py $1; \
cd /myapp/webapp ;grunt serve --force`
然后删除最后一行并用以下3行替换它来修改你的Dockerfile:
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
然后使用
重建容器图像docker build -t NAME:TAG .
现在运行以下命令来验证 ENTRYPOINT 是否 /entrypoint.sh
docker inspect NAME:TAG | less