在分离模式下在docker中运行python进程
我写了我的Python应用程序的Dockerfile。
要求是:
- 安装并启动mysql服务器。
- 以分离模式在屏幕上运行应用程序。
以下是我的Dockerfile:
FROM ubuntu:16.04 # Update OS RUN apt-get update RUN apt-get -y upgrade # Install Python RUN apt-get install -y python-dev python-pip screen npm vim net-tools RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY requirements.txt /usr/src/app RUN pip install --no-cache-dir -r requirements.txt COPY src /usr/src/app/src COPY ./src/nsd.ini /etc/ RUN pwd RUN cd /usr/src/app RUN service mysql start RUN /bin/bash -c "chmod +x src/run_demo_app.sh && src/run_demo_app.sh"
以下是bash脚本的内容
$ cat src/run_demo_app.sh $ screen -dm bash -c "sleep 10; python -m src.app";
问题是Mysql不启动。 我需要从容器手动启动它。
此外,屏幕变得死了,应用程序不启动。 手动运行脚本工作正常。
所以这是一个理解的差距,没有别的。 在你的docker文件中注意下面的问题
切勿使用服务命令
RUN service mysql start
Docker不使用init系统。 所以不要在docker中使用service
命令。
不要把所有东西都放在同一个容器里
你不应该把所有东西都放在同一个容器中。 所以mysql
应该在它自己的容器和python中运行
使用官方图片
你不需要重新发明轮子。 尽可能使用官方图片。 你应该在你的情况下使用mysql
和python
图像
当需要多个服务时使用docker-compose
在你的情况下,因为你需要多个服务,使用docker-compose
。
不需要在Docker中使用屏幕
即使您的SSH断开连接,也希望进程运行时使用屏幕。 所以在docker中不需要。 如果你运行你的docker run
或docker-compose up
命令并添加一个-d
标志,那么你的容器会自动在后台启动
- 在dockerbuild文件中添加pythonpath的path
- 从python运行一个docker容器
- Docker日志中的Pythonexception标记为stream:stdout
- 在(本地)Google Earth Engine Docker镜像上安装Python模块
- Docker镜像build立在笔记本电脑上,而不是数字海洋 – 我对Docker的理解已经破灭
- 在Docker中运行的Python / Flask中运行Vision API演示时的StatusCode.UNAUTHENTICATED
- 在PyCharm 2016中configuration远程解释器Docker时,图像名称下拉列表为空
- Py-Docker使用远程卷的create_container
- 运行在docker中导入本地脚本的python脚本