背景:dockerfile部署Python项目,同时启动web接口服务+定时任务
由于dockerfile中CMD无法同时执行多个程序,故采用sh文件的方式
创建sh文件
在项目目录路径下,编辑.sh文件
#!/bin/sh
gunicorn -c gunicorn.conf es_server:app &
python time_task.py
注意事项:在windows环境下,编辑sh文件,然后放到linux环境下执行,会报错
-bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory
解决方法:这是win的编码引起的,win环境下编辑是doc格式,linux下需要unix格式的文件。
1,window是环境下,使用Notepad++工具
2,linux环境下,使用vi编辑器
1,vi search.sh
2,查看文件格式
:set ff
3,修改文件格式为Unix
:set ff=unix
4,文件保存
:wq
Gunicorn配置
在项目目录路径下,创建gunicorn.conf文件:
workers = 5
worker_class = "gevent"
bind = "0.0.0.0:6666"
与此同时,flask服务.py文件中,不需要写ip和相应端口:
if __name__ == '__main__':
app.run()
Dockerfile文件
FROM python:3.6-slim
COPY search /home/search
RUN cd /home/search && \
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install -r requirements.txt && \
chmod 777 search.sh
EXPOSE 6666
CMD cd /home/search && ./search.sh
注意事项:
1,修改sh文件权限,可执行;
2,注意执行文件路径,确保sh文件与sh文件中的执行程序在同一路径下