Dockerfile运行Python命令无法工作

4

我有一个像这样的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运行django-bakery Python包)之外,一切都很正常。我没有收到任何错误信息。
该命令应在容器中的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

你使用什么命令来ssh进入容器? - fly2matrix
@fly2matrix 在创建容器后,它会自动执行此操作。否则,我使用 docker exec -it id bash 命令。 - Claudiu Creanga
2个回答

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

WORKDIR指令设置任何在Dockerfile中跟随它的RUN、CMD、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
请尝试以下步骤,并告诉我输出结果:

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

请给我最后一步的输出。 根据输出,我会帮助你解决问题。


是的,那个命令可以给我正确的输出。但是如果我手动在容器中运行该命令,则没有任何内容。我已更新问题并附上结果。 - Claudiu Creanga
这与卷有关吗?我已经有一个空的build_static文件夹了吗?如果是这样,有什么解决办法吗? - Claudiu Creanga
我从docker-compose.yml中删除了volumes:- .:/code,现在它仍然存在。所以我想那就是它了。非常感谢,你引导我找到了正确的解决方案。 - Claudiu Creanga
实际上是的:这是一个与卷有关的问题...尝试从docker-compose.yml中删除该部分,您将看到所有文件。 - fly2matrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接