docker-compose:尝试 "up" 容器时没有 gunicorn
docker-compose: no gunicorn when trying "up" container
当我尝试 "up" 我在 DigitalOcean 环境中的容器时遇到问题。我在 14.04 上有 Ubuntu Docker 1.7.1 作为 env droplet。有下一个错误。
mysite | ./docker-entrypoint: line 8: exec: gunicorn: not found
这是我的 Docker 文件,我在其中尝试通过 (apt-get, pip) 添加 gunicorn 设置。可悲的是,它不起作用我有同样的问题,缺少 gunicorn 模块。
Docker文件
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 设置添加到入口点文件中,但也没有用,仍然存在 "no gunicorn module" 错误。我想在这里添加它不是一个好主意,但无论如何我已经检查过了。
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-撰写-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 已编辑: 我试过在这里添加 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
服务使用 image: mysitecatalogweb_source
,并期望它包含 运行 bin/install
的提交结果,它实际上并没有提交给 mysitecatalogweb_source
图像——它位于一个容器中,所以 virtualenv 从未在第二个 mysite
容器中创建,因此没有被激活并且 gunicorn
不可用。从此处的代码片段来看,您似乎应该将 RUN bin/install
添加到 Dockerfile
以便在尝试使用它之前设置 virtualenv。
当我尝试 "up" 我在 DigitalOcean 环境中的容器时遇到问题。我在 14.04 上有 Ubuntu Docker 1.7.1 作为 env droplet。有下一个错误。
mysite | ./docker-entrypoint: line 8: exec: gunicorn: not found
这是我的 Docker 文件,我在其中尝试通过 (apt-get, pip) 添加 gunicorn 设置。可悲的是,它不起作用我有同样的问题,缺少 gunicorn 模块。
Docker文件
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 设置添加到入口点文件中,但也没有用,仍然存在 "no gunicorn module" 错误。我想在这里添加它不是一个好主意,但无论如何我已经检查过了。
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-撰写-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 已编辑: 我试过在这里添加 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
服务使用 image: mysitecatalogweb_source
,并期望它包含 运行 bin/install
的提交结果,它实际上并没有提交给 mysitecatalogweb_source
图像——它位于一个容器中,所以 virtualenv 从未在第二个 mysite
容器中创建,因此没有被激活并且 gunicorn
不可用。从此处的代码片段来看,您似乎应该将 RUN bin/install
添加到 Dockerfile
以便在尝试使用它之前设置 virtualenv。