Docker compose和docker-entrypoint

时间:2018-10-23 06:56:39

标签: 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.

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

4 个答案:

答案 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/