docker - Docker:./entrypoint.sh 未找到
问题描述
我正在尝试设置一个 django 项目并将其 dockerize。我在运行容器时遇到问题。据我所知,它是成功构建它的,但无法运行。
这是我得到的错误:
错误:对于 web 无法启动服务 web:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”./entrpoint.sh\“:stat ./entrpoint.sh:没有这样的文件或目录” :未知错误:启动项目时遇到错误。
这是泊坞窗文件:
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"]
推荐阅读
- c++ - 查找数组中最大元素的最大索引(C++)
- loops - 在SAS中为proc freq创建循环
- html - Bootstrap 根据屏幕大小调整文本大小
- pandas - 熊猫重复值:结果目视检查不重复
- json - jq字符串连接产生笛卡尔积?
- spring - Spring jsf web.xml错误页面不起作用
- maven - 使用 Maven maven-jar-plugin 将 jar 依赖目录添加到 Class-Path 清单
- runtime - Sketchware 运行时权限和我的应用程序被报告为 EVO-GEN
- flutter - Flutter:使用本地设备的 http 包连接到 localhost:5001 不起作用
- javascript - 模态框不显示文本值