创建了 Flask 应用程序并在 docker 上的 gunicorn 服务器上部署。 我想编写 shell 脚本来在 docker 容器内创建 linux 服务,这样我就可以在容器内启动、停止和重新启动我的 Flask 应用程序。
Dockerfile:
FROM python
COPY ./app /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 9003
CMD ["gunicorn", "-b", "0.0.0.0:9003", "main:app"]
使用命令构建并运行:docker run -p 9003:9003 myapp
。
我尝试打开 docker 容器 cli: docker exec -it <container_id> bash
。您可以通过命令 docker ps
找到容器 ID。
步骤 1:将目录更改为 /etc/init.d 并创建 myservice.service 文件。
[Unit]
Description=Gunicorn instance to serve app
[Service]
WorkingDirectory=/home/app
ExecStart=gunicorn --workers 3 --bind 0.0.0.0:9003 unix:app.sock -m 007 main:app
Restart=always
[Install]
WantedBy=multi-user.target
第 3 步:我通过先运行 cd /etc/rc3.d
然后运行 ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}
第 4 步:授予权限:chmod +x /etc/init.d/{SERVICENAME}
第 5 步:启动服务:`service myservice start
但这给了我错误 enter image description here
Docker 容器操作系统:Debian 10
为什么它给我未找到单位?任何的想法?如何解决?
答案 0 :(得分:0)
感谢回答。
使用窗口 10
请参阅参考资料和我在做什么。 在 docker 容器内的 /etc/systemd/system 中创建 myproject.service。
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
这个新创建的服务没有被捕获,当我尝试使用命令 service myproject start
启动这个服务时,它给出了错误 unrecognized service: myproject
。
操作系统如何知道已创建新服务并重新加载它。
在 Linux 中,通过运行 daemon-reload,它会捕获所有新创建的服务。但是如果是 docker,怎么做呢?
对于 rc 脚本,参考:https://unix.stackexchange.com/questions/106656/how-do-services-in-debian-work-and-how-can-i-manage-them