首页 > 解决方案 > 启动容器进程导致“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,我得到了错误

也尝试过这样的选择

我该如何解决?

标签: dockerdocker-compose

解决方案


删除容器内的文件volumes:块。docker-compose.ymlbackend

当你有一个volumes:像这样将主机系统代码注入容器的块时,它会完全替换映像中相应路径中的任何内容。如果您对 Dockerfile 中的映像文件系统(如RUN chmod)进行了更改,但随后在其上挂载了某些内容,则这些更改将被隐藏。

这种设置的典型动机是对容器设置中的代码进行积极开发。您可以为此使用混合 Docker/主机设置:使用 Compose 启动数据库等依赖项,但使用普通主机开发环境(例如Python 虚拟环境)来构建代码。您需要确保您有一个合理的配置系统来调整诸如数据库位置之类的东西,这在不同的环境中会有所不同(localhost:3307在基于主机的开发中,db:3306在纯容器环境中)。


推荐阅读