docker - 启动容器进程导致“exec:\”./boot.sh\“:权限被拒绝”:未知
问题描述
有一个back.Dockerfile。
FROM python:3.9
WORKDIR /src
COPY . ./
RUN apt-get update -y
RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt
RUN chmod +x boot.sh
ENTRYPOINT ["./boot.sh"]
有一个boot.sh,我在其中为 Django 进行迁移,然后启动该服务。
#!/bin/sh
while true; do
python /src/manage.py migrate
if [[ "$?" == "0" ]]; then
break
fi
echo Upgrade command failed, retrying in 5 secs...
sleep 5
done
exec python /src/manage.py runserver 0.0.0.0:8000
有一个docker-compose。
version: "3"
services:
backend:
build:
context: .
dockerfile: deploy/back.Dockerfile
volumes:
- .:/src
ports:
- 8888:8000
depends_on:
- db
db:
image: mysql:8.0.24
ports:
- '3307:3306'
environment:
MYSQL_DATABASE: ${MYSQL_NAME}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASS}
MYSQL_ROOT_PASSWORD: ${MYSQL_NAME}
volumes:
- /var/lib/vennepriser-db:/var/lib/mysql
当我运行时sudo docker-compose up
,我得到了错误
也尝试过这样的选择
ENTRYPOINT ["./boot.sh"]
ENTRYPOINT ["/src/boot.sh"]
我该如何解决?
解决方案
删除容器内的文件volumes:
块。docker-compose.yml
backend
当你有一个volumes:
像这样将主机系统代码注入容器的块时,它会完全替换映像中相应路径中的任何内容。如果您对 Dockerfile 中的映像文件系统(如RUN chmod
)进行了更改,但随后在其上挂载了某些内容,则这些更改将被隐藏。
这种设置的典型动机是对容器设置中的代码进行积极开发。您可以为此使用混合 Docker/主机设置:使用 Compose 启动数据库等依赖项,但使用普通主机开发环境(例如Python 虚拟环境)来构建代码。您需要确保您有一个合理的配置系统来调整诸如数据库位置之类的东西,这在不同的环境中会有所不同(localhost:3307
在基于主机的开发中,db:3306
在纯容器环境中)。
推荐阅读
- c - 为什么 C 的 trunc 函数显示错误?
- vba - 自定义 Outlook From 无法使用“.Close”关闭
- android - 如何在华为设备上支持HMS应用链接
- node.js - 为什么 npm install 在我的设备上不起作用,即使我重新安装了也无法查看版本详细信息?
- c++ - boost::atomic_shared_ptr 绝对安全吗?
- algorithm - 在 n 数组树中生成所有叶到叶路径
- javascript - 什么是匹配字母数字 6 字符单词的正则表达式,用空格或逗号分隔
- cassandra - Cassnadra - 基于时间戳数据类型的更新/删除
- css-filters - 更改页面上另一个元素的混合混合模式时,背景过滤器不起作用
- python - GofChisquarePower solve_power