Dockerfile运行python命令不起作用

时间:2018-04-30 09:59:22

标签: django docker dockerfile

我有一个像这样的dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
ADD reports /code/
RUN pip install -r requirements.txt
ADD . /code/
RUN ls -l /code/reports/report/manage.py  # gives expected result
RUN ls -l /code/reports/build_static/  # gives expected result
RUN python /code/reports/report/manage.py build full_report.views.RenderView  # does not work

除了通过manage.py build运行python包(django-bakery)的最后一个命令之外,一切正常。我没有收到任何错误。

此命令应输出容器中build_static目录中的一些文件。

如果我进入容器并手动运行命令,那么它正在运行。我插入了/code/的完整路径,以确保它们匹配并事先创建了所有必需的目录。

这就是我构建容器的方式:

docker-compose run django /bin/bash

这是我的docker-compose:

version: '3'

services:
  django:
    build: .
    volumes:
      - .:/code
    ports:
      - "8000:8000"

我想知道当我通过容器中的bash手动运行命令但是没有使用dockerfile中的命令时它是如何工作的。

谢谢!

更新(似乎文件已创建,但如果我检查它们,那么它们就不存在了):

Step 12/12 : RUN ls -l /code/reports/build_static/
 ---> Running in e294563d26d5
total 11080
-rw-r--r-- 1 root root 11339956 Apr 30 10:53 index.html
drwxr-xr-x 7 root root     4096 Apr 30 10:53 static
Removing intermediate container e294563d26d5
 ---> b8e72da8ee5c
Successfully built b8e72da8ee5c
Successfully tagged image_django:latest
WARNING: Image for service django was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
root@7483853ecc45:/code# ls -l reports/build_static/
total 0

2 个答案:

答案 0 :(得分:1)

以下Dockerfile将当前目录内容复制到code文件夹(如果它不存在,则创建它),然后将其设置为workdir。

  

WORKDIR指令设置任何RUN,CMD的工作目录,   在Dockerfile中跟随它的ENTRYPOINT,COPY和ADD指令

然后,为了将docker镜像大小减小到最大值,我们在一个RUN命令中重新组合所有命令,以减少层数。

FROM python:3

ENV PYTHONUNBUFFERED 1

COPY . /code
WORKDIR /code

RUN pip install -r requirements.txt && \
    ls -l reports/report/manage.py && \
    ls -l reports/build_static/ && \
    python reports/report/manage.py build full_report.views.RenderView

我没有尝试使用完整的Django应用程序示例,但它应该可以帮助您缩小问题范围!

答案 1 :(得分:1)

尝试以下步骤并让我知道输出:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
ADD reports /code/
RUN pip install -r requirements.txt
ADD . /code/
RUN ls -l /code/reports/report/manage.py  # gives expected result
RUN ls -l /code/reports/build_static/  # gives expected result
RUN python /code/reports/report/manage.py build full_report.views.RenderView  
RUN ls -l /code/reports/build_static/  # should give you expected list of files

给我输出最后一步。 我会根据输出帮助你。