Docker - Python Django 错误entrypoint.sh:没有这样的文件或目录

问题描述 投票:0回答:2

我遵循有关 DRF 后端和 Docker 用于测试 api 的教程。 教程链接:https://www.youtube.com/watch?v=tujhGdn1EMI 他们完全设置了 docker-compose 和 dockerfile。我正在关注,但在 docker 桌面上出现错误“

exec /code/docker/entrypoints/entrypoint.sh: no such file or directory
”。

docker-compose.yml 文件:

version: '3.7'
services:

  api:
    build:
      context: ./backend
      dockerfile: docker/docker_files/Dockerfile
    restart: unless-stopped
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./backend:/code
    ports:
      - 8000:8000
    env_file:
      - .env

  app:
    build:
      context: .
      dockerfile: backend/docker/docker_files/Dockerfile_app
    platform: linux/amd64
    restart: unless-stopped
    ports:
      - 5000:5000

文件 Dockerfile:

FROM python:3.10

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

RUN set -e; \
    apt-get update ;\
    apt-get -y install netcat ;\
    apt-get -y install gettext ;

RUN mkdir /code
COPY . /code/
WORKDIR /code

RUN set -e; \
    /usr/local/bin/python -m pip install --upgrade pip ;\
    python -m pip install -r /code/requirements.txt ;\
    chmod +x /code/docker/entrypoints/entrypoint.sh ;

EXPOSE 8000
ENTRYPOINT ["/code/docker/entrypoints/entrypoint.sh"]

文件入口点.sh:

#!/bin/sh
python manage.py makemigrations
python manage.py migrate
python manage.py test

exec "$@"

我的结构文件夹 DRF_docker |__server.py |__venv |__docker-compose.yml |__后端 |__reuiqrements.txt |__docker |__docker_files |__Dockerfile |__入口点 |__entrypoint.sh

我尝试删除 #!/bin/sh 并收到错误 exec /code/docker/entrypoints/entrypoint.sh: exec 格式错误 我尝试了 /code/entrypoint.sh 的短路径,但仍然没有这样的文件或目录

python-3.x docker docker-compose dockerfile docker-entrypoint
2个回答
0
投票

您可以尝试更改 ENTRYPOINT。 来自:

ENTRYPOINT [ "/code/docker/entrypoints/entrypoint.sh"]

致:

ENTRYPOINT ["bash", "-e", "/code/docker/entrypoints/entrypoint.sh"]

在Linux上运行Dockerfile时似乎出现问题: https://github.com/bobby-didcoding/drf_course/issues/4


0
投票

依赖于使用 Windows 操作系统和 Docker 环境的 Linux,在 seu Entrypoint.sh 中出现行结尾错误,在窗口中使用 CRLF(回车 + 换行),然后执行linux LF(换行),可以使用解析器来解决入口点的问题。sh 可以使用文本编辑器(没有 VSCode)和更改“选择行尾序列”选项,请参阅Salvar 作为替代品重建图像和容器。

© www.soinside.com 2019 - 2024. All rights reserved.