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