2017-09-25 76 views
0

我似乎已经尝试了每个解决方案在这里,但似乎没有工作,我不知道我错过了什么。我试图通过我的码头集装箱运行芹菜作为守护进程。Docker - 芹菜作为一个守护进程 - 没有发现pidfiles

[email protected]:/itapp/itapp# /etc/init.d/celeryd status 
celery init v10.1. 
Using config script: /etc/default/celeryd 
celeryd down: no pidfiles found 
[email protected]:/itapp/itapp# /etc/init.d/celerybeat status 
celery init v10.1. 
Using configuration: /etc/default/celeryd 
celerybeat is down: no pid file found 
[email protected]:/itapp/itapp# 

我见过很多关于烫发的帖子,我已经尝试过所有这些都无济于事。

这是,如果我启动它手动它的工作原理

celery -A itapp worker -l info 
/usr/local/lib/python3.6/site-packages/celery/platforms.py:795: RuntimeWarning: You're running the worker with superuser privileges: this is 
absolutely not recommended! 

Please specify a different user using the -u option. 
... 

[2017-09-25 17:29:51,707: INFO/MainProcess] Connected to amqp://it-app:**@rabbitmq:5672/it-app-vhost 
[2017-09-25 17:29:51,730: INFO/MainProcess] mingle: searching for neighbors 
[2017-09-25 17:29:52,764: INFO/MainProcess] mingle: all alone 

的init.d中文件从芹回购复制,这其中创建所有烫发和文件夹

FROM python:latest 
ENV PYTHONUNBUFFERED 1 

# add source for snmp 
RUN sed -i "s#jessie main#jessie main contrib non-free#g" /etc/apt/sources.list 
# install dependancies 
RUN apt-get update -y \ 
    && apt-get install -y apt-utils python-software-properties libsasl2-dev python3-dev libldap2-dev libssl-dev libsnmp-dev snmp-mibs-downloader git vim 

# copy and install requirements 
RUN mkdir /config 
ADD /config/requirements.txt /config/ 
RUN pip install -r /config/requirements.txt 
# create folders 
RUN mkdir /itapp; 
RUN mkdir /static; 
# create celery user 
RUN useradd -N -M --system -s /bin/false celery 
RUN echo celery:"*****" | /usr/sbin/chpasswd 
# celery perms 
RUN groupadd grp_celery 
RUN usermod -a -G grp_celery celery 
RUN mkdir /var/run/celery/ 
RUN mkdir /var/log/celery/ 
RUN chown root:root /var/run/celery/ 
RUN chown root:root /var/log/celery/ 
# copy celery daemon files 
ADD /config/celery/init_celeryd /etc/init.d/celeryd 
RUN chmod +x /etc/init.d/celeryd 
ADD /config/celery/celerybeat /etc/init.d/celerybeat 
RUN chmod +x /etc/init.d/celerybeat 
RUN chmod 755 /etc/init.d/celeryd 
RUN chown root:root /etc/init.d/celeryd 
RUN chmod 755 /etc/init.d/celerybeat 
RUN chown root:root /etc/init.d/celerybeat 
# copy celery config 
ADD /config/celery/default_celeryd /etc/default/celeryd 
# RUN /etc/init.d/celeryd start 
# set workign DIR for copying code 
WORKDIR /itapp 

我的搬运工文件是我的默认文件的内容,如果它有帮助

# Names of nodes to start 
# most people will only start one node: 
CELERYD_NODES="worker1" 
# but you can also start multiple and configure settings 
# for each in CELERYD_OPTS 
#CELERYD_NODES="worker1 worker2 worker3" 
# alternatively, you can specify the number of nodes to start: 
#CELERYD_NODES=10 

# Absolute or relative path to the 'celery' command: 
CELERY_BIN="/usr/local/bin/celery" 

# App instance to use 
# comment out this line if you don't use an app 
CELERY_APP="itapp" 
# or fully qualified: 

# Where to chdir at start. 
CELERYD_CHDIR="/itapp/itapp/" 

# Extra command-line arguments to the worker 
CELERYD_OPTS="flower --time-limit=300 --concurrency=8" 
# Configure node-specific settings by appending node name to arguments: 
#CELERYD_OPTS="--time-limit=300 -c 8 -c:worker2 4 -c:worker3 2 -Ofair:worker1" 

# Set logging level to DEBUG 
#CELERYD_LOG_LEVEL="DEBUG" 

# %n will be replaced with the first part of the nodename. 
CELERYD_LOG_FILE="/var/log/celery/%n%I.log" 
CELERYD_PID_FILE="/var/run/celery/%n.pid" 

# Workers should run as an unprivileged user. 
# You need to create this user manually (or you can choose 
# a user/group combination that already exists (e.g., nobody). 
CELERYD_USER="celery" 
CELERYD_GROUP="celery" 

# If enabled pid and log directories will be created if missing, 
# and owned by the userid/group configured. 
CELERY_CREATE_DIRS=1 

这个文件中唯一的m AY是错误的,我认为是CELERY_BIN值,我不知道该怎么设置太泊坞窗容器

感谢

+0

你能提供一个最小的git repo来重现这个吗? –

+0

是的,这里是https://github.com/ajwillo/celery-daemon-test – AlexW

回答

1

所以你在Dockerfile有几个问题

  • 芹菜工艺外壳被设置为/bin/false,这不允许任何进程启动。
  • 你需要给上/var/run/celery/var/log/celery许可权celery用户
  • /etc/default/celeryd应该是640允许
  • 此外,在您的Dockerfile太多层

所以我的Dockerfile更新到下面

FROM python:latest 
ENV PYTHONUNBUFFERED 1 

# add source for snmp 
RUN sed -i "s#jessie main#jessie main contrib non-free#g" /etc/apt/sources.list 
# install dependancies 
RUN apt-get update -y \ 
    && apt-get install -y apt-utils python-software-properties libsasl2-dev python3-dev libldap2-dev libssl-dev libsnmp-dev git vim 

# copy and install requirements 
RUN mkdir /config 
ADD /config/requirements.txt /config/ 
RUN pip install -r /config/requirements.txt 
# create folders 
RUN mkdir /itapp && mkdir /static; 
# create celery user 
RUN useradd -N -M --system -s /bin/bash celery && echo celery:"B1llyB0n3s" | /usr/sbin/chpasswd 
# celery perms 
RUN groupadd grp_celery && usermod -a -G grp_celery celery && mkdir -p /var/run/celery/ /var/log/celery/ 
RUN chown -R celery:grp_celery /var/run/celery/ /var/log/celery/ 
# copy celery daemon files 
ADD /config/celery/init_celeryd /etc/init.d/celeryd 
RUN chmod +x /etc/init.d/celeryd 
ADD /config/celery/celerybeat /etc/init.d/celerybeat 
RUN chmod 750 /etc/init.d/celeryd /etc/init.d/celerybeat 
RUN chown root:root /etc/init.d/celeryd /etc/init.d/celerybeat 
# copy celery config 
ADD /config/celery/default_celeryd /etc/default/celeryd 
RUN chmod 640 /etc/default/celeryd 
# set workign DIR for copying code 
ADD /itapp/ /itapp/itapp 
WORKDIR /itapp 

然后进入web服务容器,并一切正常

[email protected]:/itapp/itapp# /etc/init.d/celeryd status 
celery init v10.1. 
Using config script: /etc/default/celeryd 
celeryd down: no pidfiles found 
[email protected]:/itapp/itapp# /etc/init.d/celeryd start 
celery init v10.1. 
Using config script: /etc/default/celeryd 
celery multi v4.1.0 (latentcall) 
> Starting nodes... 
    > [email protected]: OK 
    > [email protected]: OK 
[email protected]:/itapp/itapp# /etc/init.d/celeryd status 
celery init v10.1. 
Using config script: /etc/default/celeryd 
celeryd down: no pidfiles found 
[email protected]:/itapp/itapp# /etc/init.d/celeryd status 
celery init v10.1. 
Using config script: /etc/default/celeryd 
celeryd (node worker1) (pid 66) is up... 
[email protected]:/itapp/itapp# 
+0

感谢您的帮助! celeryd现在开始,但是celerybeat仍然有同样的问题,缺少什么让他们俩起来? – AlexW

+0

关于这个的任何想法? – AlexW

+0

在你的容器中运行这个命令'/ usr/local/bin/celery beat --app = itapp -f /var/log/celery/beat.log -l INFO --workdir =/itapp/itapp/--pidfile =/var/run/celery/beat.pid',你会发现你有缺少的软件包。因此,请先在您的requirements.txt文件中修复此问题 –