在分离模式下在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中运行

使用官方图片

你不需要重新发明轮子。 尽可能使用官方图片。 你应该在你的情况下使用mysqlpython图像

当需要多个服务时使用docker-compose

在你的情况下,因为你需要多个服务,使用docker-compose

不需要在Docker中使用屏幕

即使您的SSH断开连接,也希望进程运行时使用屏幕。 所以在docker中不需要。 如果你运行你的docker rundocker-compose up命令并添加一个-d标志,那么你的容器会自动在后台启动