首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dockerfile运行python命令无效

Dockerfile运行python命令无效
EN

Stack Overflow用户
提问于 2018-04-30 09:59:21
回答 2查看 2.7K关注 0票数 4

我有一个像这样的文件:

代码语言:javascript
运行
复制
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),一切都很好。我没有任何错误。

这个命令应该在容器中的build_static目录中输出一些文件。

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

我就是这样构建容器的:

代码语言:javascript
运行
复制
docker-compose run django /bin/bash

这是我的船坞-写作:

代码语言:javascript
运行
复制
version: '3'

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

我想知道,当我通过容器内的bash手动运行命令,而不是在dockerfile中使用该命令时,它是如何工作的。

谢谢!

Update (文件似乎已经创建,但是如果我检查它们,它们就不在了):

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-30 10:53:01

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

代码语言:javascript
运行
复制
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

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

票数 1
EN

Stack Overflow用户

发布于 2018-04-30 10:21:10

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

WORKDIR指令为任何运行、CMD、ENTRYPOINT、复制和添加在Dockerfile中的指令设置工作目录

然后,为了最大限度地缩小对接图像大小,我们将所有命令重新组合在一个RUN命令中,这样就减少了层数。

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50098125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档