【问题标题】:docker-compose: no gunicorn when trying "up" containerdocker-compose:尝试“向上​​”容器时没有 gunicorn
【发布时间】:2015-10-11 01:21:11
【问题描述】:

当我尝试在 DigitalOcean 环境中“升级”我的容器时遇到问题。我有 Ubuntu Docker 1.7.1 on 14.04 作为 env droplet。还有下一个错误。

mysite | ./docker-entrypoint: line 8: exec: gunicorn: not found

这是我尝试通过 (apt-get, pip) 添加 gunicorn 设置的 Dockerfile。可悲的是,但它不起作用我有同样的问题,错过了 gunicorn 模块。

Dockerfile

FROM python:2.7.7

RUN curl -sL https://deb.nodesource.com/setup | bash -
RUN apt-get -y install nodejs
RUN apt-get -y install libpango1.0-0 libgdk-pixbuf2.0-0

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app

VOLUME /usr/src/app/venv
VOLUME /usr/src/app/node_modules
VOLUME /usr/src/app/static

ENTRYPOINT ["./docker-entrypoint"]

此外,我尝试将 gunicorn 设置添加到入口点文件中,但仍然无法正常工作,仍然出现“没有 gunicorn 模块”错误。我想在这里添加它不是一个好主意,但无论如何我已经检查过了。

Docker 入口点

#!/bin/bash
set -e

if [[ -e venv/bin/activate ]]; then
    source venv/bin/activate
fi

exec "$@"

docker-compose.yml

source:
  extends:
    file: docker-compose-common.yml
    service: prod
  build: .
  command: bin/install

redis:
  image: redis:latest
  command: redis-server --appendonly yes

mysite:
  extends:
    file: docker-compose-common.yml
    service: prod
  image: mysitecatalogweb_source
  volumes_from:
    - source
  environment:
    - SITE_ID=1
  command: gunicorn -k gevent -b 0.0.0.0:8000 --access-logfile - --error-logfile - mysite.wsgi

docker-compose-common.yml

dev:
  environment:
    - PYTHONUNBUFFERED=1
    - ENV=DEV
    - POSTGRES_HOST=host
    - POSTGRES_USER=user
  env_file: dev.env

prod:
  environment:
    - ENV=PROD
  env_file: prod.env

也许我需要直接将 gunicorn 设置添加到 bin/install 中(应该从 source 任务中调用)但这也可以在 requirements.txt EDITED: 我已经尝试在这里添加 gunicorn 并且它仍然是 mysite | ./docker-entrypoint: line 8: exec: gunicorn: not found

bin/install

set -e

pip install virtualenv
if [[ ! -e venv/bin/activate ]]; then
  virtualenv venv
  source venv/bin/activate
fi

pip install -r requirements.txt

mkdir -p static/js
npm install
npm run browserify

同时检查我的 requirements.txt https://gist.github.com/alexnodejs/3789b4eb7621687e010b

也许有人已经遇到过与独角兽类似的问题? 请告知我应该在哪里挖掘。

【问题讨论】:

  • mysite服务中,你使用的是source服务的镜像……我从没见过这种配置。这样做的原因是什么?您应该能够在 Dockerfile 中使用 RUN pip install gunicorn 安装 gunicorn。抱歉,如果这是一个愚蠢的问题,但您之前是否运行过 docker-compose build 以使用 docker-compose up
  • Alexis 感谢您的回复,使用 source 服务的原因是我实际上在一个 django 项目(容器)中有多个站点,并且源服务有助于构建它们(只是分享卷)。是的,我在up 之前运行docker-compose -f docker-compose-prod.yml build
  • 另外我会再次尝试将RUN pip install gunicorn添加到Docker文件并重建项目,也许我做错了什么。
  • 尝试重新思考整个问题。在容器内使用 venv 是不必要的,因为您已经在隔离环境中但级别较低,也许这就是原因。
  • @AlexisN-o docker-compose build 为我修复了它。谢谢!

标签: django docker gunicorn digital-ocean docker-compose


【解决方案1】:

我看到的主要问题是您将image: mysitecatalogweb_source 用于您的mysite 服务,并期望它包括运行bin/install 的已提交结果,而实际上并没有提交到mysitecatalogweb_source 图像-- 它位于一个容器中,因此 virtualenv 从未在第二个mysite 容器中创建,因此未激活,gunicorn 不可用。从这里的 sn-p 来看,您似乎应该将 RUN bin/install 添加到您的 Dockerfile 以便在尝试使用它之前设置 virtualenv。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2023-03-09
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多