docker-compose 与 Dockerfile 入口点脚本冲突

docker-compose conflicts with Dokerfile entry-point script

我正在尝试使用我的 Django 应用程序创建一个 Docker 图像,但不幸的是,我在尝试 运行 我的入口点脚本时遇到了麻烦。

Docker 退出代码错误 127 并显示以下消息:

/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

您可以在下面找到相应的配置文件:

Docker文件

FROM python:2.7
ENV PYTHONUNBUFFERED 1

RUN mkdir -p /web/src
ADD . /web/src
WORKDIR /web/src
RUN pip install -U pip
RUN pip install -r requirements.txt -U
RUN chmod u+x docker-entrypoint.sh

ENTRYPOINT ["/bin/bash", "docker-entrypoint.sh"]

docker-entrypoint.sh

#!/bin/bash
python manage.py migrate                  
python manage.py collectstatic --noinput  

touch /srv/logs/gunicorn.log
touch /srv/logs/access.log
tail -n 0 -f /srv/logs/*.log &

echo Starting Gunicorn...
exec gunicorn config.wsgi:application \
    --name django_server \
    --bind 0.0.0.0:8000 \
    --workers 3 \
    --log-level=info \
    --log-file=/srv/logs/gunicorn.log \
    --access-logfile=/srv/logs/access.log \
    "$@"

docker-compose.yml

version: '2.0'
services:
  db:
    container_name: db_server
    image: postgres
  web:
    container_name: django_server
    build: .
    volumes:
      - .:/web/src
    environment:
      - SECRET_KEY=k3jghf1jk%$JH^1GJH5@YUTR@!MBMB<5=7DXXG)JHSX=
      - PGDATABASE=postgres
      - PGUSER=postgres
      - PGPASSWORD=''
      - PGHOST=db
      - DJANGO_ENV=development
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    links:
      - db

在本地重现问题后:docker build . 成功构建图像,但是当尝试使用 docker-compose up 启动图像时,我收到以下错误 exec: gunicorn: not found,如上文所述。基于我可以解决运行宁docker-compose build的问题。所以总结以下3个命令应该可以解决问题:

  1. docker build .
  2. docker-compose build
  3. docker-compose up

尽管这解决了我的问题,但我仍然很困惑,为什么我需要 运行 构建两次。我的意思是它应该是哪里出了问题,因为据我所知,docker-compose build 应该和 docker build . 做同样的工作。