Python 3.8-Alpine泊坞窗撰写失败

时间:2020-05-24 19:02:10

标签: django docker python-3.8

我一直在运行没有docker的应用程序,并且刚刚添加了Dockerfiledocker-compose

我遇到的问题是,在成功构建应用程序后,当我运行runservermigrate时,会产生以下错误。

➜  app git:(master) sudo docker-compose run app sh -c "python manage.py runserver"
Error loading shared library libpython3.8.so.1.0: No such file or directory (needed by /usr/local/bin/python)
Error relocating /usr/local/bin/python: Py_BytesMain: symbol not found
failed to resize tty, using default size
                                        %                                                                                                                                                                                                                                                                                       
➜  app git:(master) sudo docker-compose run app sh -c "python manage.py migrate"  
Error loading shared library libpython3.8.so.1.0: No such file or directory (needed by /usr/local/bin/python)
Error relocating /usr/local/bin/python: Py_BytesMain: symbol not found

Dockerfile

FROM python:3.8-alpine
MAINTAINER realize-sec

ENV PYTHONUNBUFFERED 1

COPY requirements.txt /requirements.txt
RUN pip install -r requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user

docker-compose.yml

version: "3"

services:
  app:
    build:
      context: ""
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"

我在做错什么导致了这个问题?

当我使用python3 manage.py runserver在没有docker的情况下运行时,效果很好。

1 个答案:

答案 0 :(得分:0)

由于我尚未测试过构建,因此我不知道这些东西是否会帮助您最终构建容器,但是这里有一些观察结果希望使您走上正确的道路。

  • 您的上下文是一个空字符串,通常是一个点(。)
  • 您通常使用以下命令完成Dockerfile:

CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000" ]

因此您可以将其从撰写文件中删除。

除此之外,更一般地说,尽管Alpine映像很小,但由于需要添加/删除附加的依赖项和程序包,它们很容易损坏。总体来说,选择苗条的版本可能会更好。原始版本将花费更长的时间,但更易于管理。

此外,如果您在计算机上运行的是现代版本的Docker,则可以根据Docker的版本将组合文件的语法版本移动到3.7或3.8版本。