2017-09-25 105 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文件中修復此問題 –