Joe*_*der 4 docker docker-compose
在运行docker-compose up --build时,我总是遇到此错误消息。有人知道docker-entrypoint文件在做什么吗?
ERROR: for 986991ccdfe1_ubercoach_web_1 Cannot start service web: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./docker-entrypoint.sh\": permission denied": unknown
ERROR: for web Cannot start service web: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./docker-entrypoint.sh\": permission denied": unknown
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)
码头工人组成:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
web:
build: .
entrypoint: ./docker-entrypoint.sh
env_file: .env
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
#从python:3提取基本图像
# Set environment varibles
ENV PYTHONUNBUFFERED 1
# Set work directory
RUN mkdir /code
WORKDIR /code
# Install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /code/Pipfile
RUN pipenv install --deploy --system --skip-lock --dev
# Copy project
COPY . /code/
Run Code Online (Sandbox Code Playgroud)
docker-entrypoint.sh
#!/bin/bash
# Collect static files
echo "Collect static files"
python manage.py collectstatic --noinput
# Apply database migrations
echo "Apply database migrations"
python manage.py migrate
# Start server
echo "Starting server"
python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
解决方案对我来说有点不同。首先,我需要为 docker-compose 提供入口点文件的引用。我的 dockerfile、docker-compose 和入口点文件都位于名为 docker 的目录中,因此
services:
app:
build:
context: ..
dockerfile: docker/Dockerfile.development
entrypoint: docker/development-entrypoint.sh
ports:
- 3000:3000
env_file:
- ../.env.development
depends_on:
- postgres
Run Code Online (Sandbox Code Playgroud)
我还需要更改入口点的执行权,我在 dockerfile 中这样做了,如下所示。
RUN chmod 755 docker/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
最烦人的部分是 .sh 文件。通常,在许多不同的 Linux 系统中,您将像这样启动 .sh 文件
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
基本上,在一个 Linux 系统中,您使用不同的 shell。在 .sh 文件中,为了定义要使用哪个 shell,请按所示启动该文件。但对我来说它不起作用,因为我使用的是节点 alpine 图像,当我检查时,根本没有 bash,所以我不得不将其更改为此。
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助您或任何遇到此问题的人!
\“。/docker-entrypoint.sh \”:权限被拒绝“:未知
我猜您docker-entrypoint.sh没有执行权限(x)。但docker-compose.yml实际上也不是最好的地方docker-entrypoint.sh。这是替代设置,请参见entrypoint。默认值应放在中Dockerfile。尝试这个:
将此添加到您的末尾 Dockerfile
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
的docker-entrypoint.sh应在相同的文件夹Dockerfile(或调整COPY路径)。entrypoint从您的上删除该行docker-compose.yml。重建,重新运行。
你应该像这样复制入口点:
docker-撰写:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
web:
build: .
entrypoint: /docker-entrypoint.sh
env_file: .env
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
# Pull base image FROM python:3
# Set environment varibles
ENV PYTHONUNBUFFERED 1
# Set work directory
RUN mkdir /code
WORKDIR /code
# Install dependencies
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /code/Pipfile
RUN pipenv install --deploy --system --skip-lock --dev
# Copy project
COPY . /code/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10835 次 |
| 最近记录: |