neb*_*ebi 1 python docker dockerfile
我已经为我的 python 应用程序编写了 Dockerfile。
要求是:
下面是我的 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"
Run Code Online (Sandbox Code Playgroud)
下面是bash脚本的内容
$ cat src/run_demo_app.sh
$ screen -dm bash -c "sleep 10; python -m src.app";
Run Code Online (Sandbox Code Playgroud)
问题是Mysql 没有启动。我需要从容器手动启动它。
此外,屏幕变得死机并且应用程序无法启动。手动运行脚本工作正常。
所以这是一个理解差距,仅此而已。请注意您的 docker 文件中的以下问题
永远不要使用服务命令
RUN service mysql start
Run Code Online (Sandbox Code Playgroud)
Docker 不使用初始化系统。所以永远不要service在 docker 中使用命令。
不要把所有东西都放在同一个容器里
你不应该把所有东西都放在同一个容器里。所以mysql应该在它自己的容器中运行,并在它自己的 python 中运行
使用官方图片
你不需要重新发明轮子。尽量使用官方图片。你应该在你的情况下使用mysql和python图像
当需要多个服务时使用 docker-compose
在您的情况下,由于您需要多项服务,请使用docker-compose.
无需在 docker 中使用屏幕
当您希望即使 SSH 断开连接也能运行进程时,将使用 Screen。所以在docker中不需要。如果您使用附加标志运行您的docker run或docker-compose up命令,-d那么您的容器将在后台自动启动
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |