ami*_*dav 4 python django bash docker docker-compose
我正在尝试从 docker 文件运行容器。
**docker-compose.yml**
services:
djangoapp:
build: .
volumes:
- .:/opt/services/djangoapp/src
ports:
- 8000:8000
**Dockerfile** this is entry in Docker file
ENTRYPOINT bash start.sh
**start.sh**
#!/bin/bash
## run gunicorn in background......
gunicorn --chdir hello --bind :8000 hello_django.wsgi:application &
Run Code Online (Sandbox Code Playgroud)
当我从同一个Dockerfile构建图像时,它工作正常。当我从 docker-compose up 启动时,它显示已退出,代码为 0。 我想知道我的 docker 退出的原因(18 秒前退出(0))?
您的start.sh脚本启动一些后台进程,然后到达末尾并退出(成功,因此状态代码为 0)。当start.sh脚本退出时,由于它是容器的ENTRYPOINT,因此容器会以相同的状态代码退出。
需要有某个进程作为前台进程运行,并且只要该进程存在,容器就会一直运行。CMD在您的情况下,这是 GUnicorn 进程,您可以将其指定为Dockerfile 中的图像:
CMD gunicorn --chdir hello --bind :8000 hello_django.wsgi:application
Run Code Online (Sandbox Code Playgroud)
如果脚本中唯一的事情start.sh就是运行该行,则可以删除该ENTRYPOINT行。如果没有,请将其更改exec "$@"为最后一行运行(以运行CMD),并将 DockerfileENTRYPOINT行更改为 JSON 数组语法:
CMD gunicorn --chdir hello --bind :8000 hello_django.wsgi:application
Run Code Online (Sandbox Code Playgroud)
RUN chmod +x start.sh
ENTRYPOINT ["./start.sh"]
CMD gunicorn --chdir hello --bind :8000 hello_django.wsgi:application
Run Code Online (Sandbox Code Playgroud)
(我会避免在容器启动脚本中运行后台进程:没有任何东西会监视或重新启动这些进程,并且您可能会处于半运行容器的状态,或者您不必要地需要重新启动某些东西,因为其他东西得到了更新如果需要运行多个进程,尽量将它们安排在单独的容器中运行;如果只需要一个,则将其作为前台进程运行。)
| 归档时间: |
|
| 查看次数: |
17038 次 |
| 最近记录: |