当我从docker容器内部启动uwsgi时,一切正常。我打电话:
docker run -it -p 9098:9098 --rm --entrypoint=/bin/bash pyramid:latest
在我调用的容器内:
jenkins@9c36ddb99971:~/my_project$ uwsgi --ini-paste dev.ini --chdir /home/jenkins/my_project/
[uWSGI] getting INI configuration from dev.ini
jenkins@9c36ddb99971:~/my_project
一切都正常运行。
docker ps -a
9c36ddb99971 pyramid:latest "/bin/bash" About a minute ago Up About a minute 0.0.0.0:9098->9098/tcp festive_ride
当我尝试从外部启动 uwsgi 服务时,uwsgi 没有运行
me@me-W35 ~/docker_test/pyramid $ docker run -it -p 9098:9098 --rm pyramid:latest
[uWSGI] getting INI configuration from /home/jenkins/my_project/dev.ini
me@me-W35 ~/docker_test/pyramid
我尝试了入口点,CMD,运行...什么都没用。什么也没发生。没有错误。
这是我的 Dockerfile:
FROM ubuntu:16.04
RUN apt-get update -y &&
apt-get install -y python-pip python-dev &&
apt-get install -y curl &&
apt-get install -y wget &&
apt-get install -y zlib1g-dev &&
apt-get install -y libssl-dev &&
apt-get install -y libffi-dev &&
apt-get install -y vim &&
apt-get install -y iputils-ping &&
pip install --upgrade pip setuptools &&
apt-get install -y git &&
apt-get install -y libpq-dev &&
apt-get install -y libxml2-dev &&
apt-get install -y libxmlsec1-dev &&
apt-get install -y libsqlite3-dev
RUN useradd -m jenkins
USER jenkins
ENV HOME /home/jenkins
# Install Python 2.7.11
RUN curl -o $HOME/Python-2.7.11.tar.xz https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz &&
tar -xf $HOME/Python-2.7.11.tar.xz -C $HOME &&
cd $HOME/Python-2.7.11 && ./configure --prefix=$HOME/local/python2711 && make && make install
COPY requirements.txt $HOME/
USER jenkins
# Install pip
RUN curl -s https://bootstrap.pypa.io/get-pip.py > /tmp/get-pip.py &&
$HOME/local/python2711/bin/python2.7 /tmp/get-pip.py &&
$HOME/local/python2711/bin/pip install virtualenv
RUN $HOME/local/python2711/bin/virtualenv $HOME/my_project
WORKDIR $HOME/my_project
RUN . $HOME/my_project/bin/activate;
RUN $HOME/local/python2711/bin/pip install -r $HOME/requirements.txt
ENV PATH $HOME/local/python2711/bin:$PATH
ENV PYTHONPATH $HOME/local/python2711/lib
COPY dev.ini $HOME/my_project/
USER root
RUN chown -R jenkins:jenkins $HOME/
USER jenkins
EXPOSE 9098
CMD ["uwsgi", "--ini-paste", "/home/jenkins/my_project/dev.ini", "--chdir", "/home/jenkins/my_project"]
开发.ini:
###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/1.5-branch/narr/environment.html
###
[app:main]
use = egg:my_package
pyramid.reload_templates = false
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/1.5-branch/narr/logging.html
###
[loggers]
keys = root, my_package
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
[logger_my_package]
level = WARN
handlers =
qualname = my_package
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 9099
[uwsgi]
http = 0.0.0.0:9098
socket = :9097
master = true
module = my_package:application
processes = 4
harakiri = 3600
harakiri-verbose = true
limit-post = 65536
post-buffering = 8192
#logto = /home/jenkins/my_package.log
daemonize = /home/jenkins/my_package.log
pidfile = /home/jenkins/my_package.pid
stats = /home/jenkins/my_packagestats
listen = 128
max-requests = 1000
reload-on-as = 128
reload-on-rss = 96
no-orphans = true
log-slow = true
need-app = true
memory-report = true
我找到了解决方案。在开发中.ini我必须像这样更改"取消注释":
logto = /home/jenkins/my_package.log
#daemonize = /home/jenkins/my_package.log
在 Dockerfile 中:
ENTRYPOINT ["uwsgi"]
CMD ["--ini-paste", "/home/jenkins/my_project/dev.ini", "--chdir", "/home/jenkins/my_project"]
现在 uwsgi 已正确启动。