在运行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.
docker-compose:
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
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/
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
答案 0 :(得分:3)
\“。/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"]
docker-entrypoint.sh
应该与Dockerfile
位于同一文件夹中(或调整COPY
路径)。从您的entrypoint
中删除docker-compose.yml
行。重建,重新运行。
答案 1 :(得分:0)
我在这个问题上花了很多时间。问题是由于网络服务上的音量。我遇到了问题,因为我是在docker-machine上部署我的应用的。 Docker使用的是使用它在远程计算机中找不到的卷。运行以下命令以擦除容器和卷,这是摆脱该问题的简单方法。
docker-compose down -v
注意事项:请谨慎使用上述命令。因为它会删除所有卷,因此会删除它们上的所有数据。
我使用的解决方案包括docker一个不同的 docker-file ,并且不向Web服务添加卷。
答案 2 :(得分:0)
您可以在入口点添加“ bash”:
ENTRYPOINT ["bash","docker-entrypoint.sh"]
答案 3 :(得分:0)
您应该这样复制入口点:
docker-compose:
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
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/