Docker:./entrypoint.sh未找到

Docker:./entrypoint.sh未找到,docker,django-rest-framework,Docker,Django Rest Framework,我正在尝试设置一个django项目并将其dockerize。 我运行集装箱时遇到问题。 据我所知,它成功地建立了它,但未能运行 这是我得到的错误: 错误:for web无法启动服务web:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\”/entrpoint.sh\”:stat./entrpoint.sh:没有这样的文件或目录:未知 错误:在启动项目时遇到错误 这是dockerfile: FROM python:3.6 RUN mkdir

我正在尝试设置一个django项目并将其dockerize。 我运行集装箱时遇到问题。 据我所知,它成功地建立了它,但未能运行

这是我得到的错误:

错误:for web无法启动服务web:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\”/entrpoint.sh\”:stat./entrpoint.sh:没有这样的文件或目录:未知 错误:在启动项目时遇到错误

这是dockerfile:

FROM python:3.6

RUN mkdir /backend
WORKDIR /backend
ADD . /backend/

RUN pip install -r requirements.txt

RUN apt-get update \
    && apt-get install -yyq netcat

RUN chmod 755 entrypoint.sh

ENTRYPOINT ["./entrpoint.sh"]
这是撰写文件:

version: '3.7'

services:
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=django
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=database

  web:
    restart: on-failure
    build: .
    container_name:backend
    volumes:
      - .:/backend
    env_file:
      - ./api/.env
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    hostname: web
    depends_on:
      - db

volumes:
  postgres_data:
还有一个入口点文件,它运行自动迁移(如果有): 以下是脚本:

#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

python manage.py migrate

exec "$@"

我哪里出错了?

问题在于,您需要的不是
entrypoint.sh
,而是
nc
命令

要解决此问题,您必须安装
netcat
软件包

由于
python:3.6
基于debian buster,您只需在
FROM
指令之后添加以下命令:

RUN apt-get update \
    && apt-get install -yyq netcat
编辑以进一步改进:

  • 仅复制
    requirements.txt
    ,安装软件包,然后复制其余软件包。这将提高缓存的使用率,并且每次构建(在第一次构建之后)都会更快(除非您接触requirements.txt)
  • ADD
    替换为
    COPY
    ,除非你正在炸柏油球
结果应该如下所示:

FROM python:3.6

RUN apt-get update \
    && apt-get install -yyq netcat

RUN mkdir /backend
WORKDIR /backend
COPY requirements.txt /backend/

RUN pip install -r requirements.txt

COPY . /backend/

ENTRYPOINT ["./entrypoint.sh"]

如果我没有错的话,它似乎需要netcat来与数据库通信?您需要netcat来测试数据库是否已启动:
while!nc-z$SQL\U主机$SQL\U端口;执行
。顺便说一句,我添加了其他建议,但我在构建它时遇到了这个错误:错误:for web无法启动服务web:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\”/entrpoint.sh\”:stat./entrpoint.sh:没有这样的文件或目录:未知添加新信息到问题中,我看看是否可以回答。尝试提供尽可能多的信息以执行以下操作:
docker build-t mytest.
然后在生成完成后:
docker run--rm-it mytest:latest bash
。检查位置和文件是否存在:<代码> PWD 和 LS-ALH 。在DoCKfile的最后一行中,