J'essaye de composer l'image maître de buildbot de docker la plus simple possible qui exécute buildbot start
en instructions ENTRYPOINT/CMD
Dockerfile
.
J'ai essayé d'utiliser beaucoup de combinaisons de dumb-init
, gosu
et exec
, mais sans succès.
La situation est la suivante:Daemonized buildbot start
Lorsque je tente de lancer deamonized buildroot avec la commande
docker run -d -v $local/vol/bldbot/master:/var/lib/buildbot buildbot-master-test
, le conteneur démarre correctement, mais il est mis fin brusquement. Le journal se présente comme suit:[horodatage] [-] Journal ouvert.
[horodatage] [-] twistd 16.0.0 (/ usr/bin/python 2.7.12) démarrage.
[horodateur] [-] Classe de réacteur: twisted.internet.epollreactor.EPollReactor.
[timestamp] [-] A partir BuildMaster - buildbot.version: 0.9.2
[timestamp] [-] configuration de chargement de '/var/lib/buildbot/master.cfg'
[timestamp] [-] Configuration de la base de données avec l'URL 'sqlite: /state.sqlite'
[timestamp] [-] Définition du mode de journalisation de la base de données sur 'wal'
[timestamp] [-] exécution du nettoyage pour le maître 1 c8aa8b0d5ca3:/var/lib/buildbot
[timestamp] [-] ajoutant 1 changesources nouveaux, en supprimant 0
[timestamp] [-] en ajoutant 1 nouveaux adjuvants, en supprimant 0
[timestamp] [-] en ajoutant 2 nouveaux ordonnanceurs, en supprimant 0
[timestamp] [-] Aucun serveur web configuré sur ce maître
[timestamp] [-] ajouter 1 nouveaux travailleurs, la suppression 0
[timestamp] [-] PBServerFactory à partir de 9989
[timestamp] [-] à partir usine
[timestamp] [-] BuildMaster est en cours d'exécutionQuand je lance le conteneur en mode interactif avec la commande suivante
docker run --rm -it -v $local/vol/bldbot/master:/var/lib/buildbot buildbot-master-test /bin/sh
et je lance la commandebuildbot start
tous les travaux comme un charme.
Je l'ai déjà étudié le contenu de l'image maître officiel de buildbot docker, à savoir buildbot/buildbot-master
. Je vois que les auteurs ont décidé d'utiliser la commande exec twistd -ny $B/buildbot.tac
dans start_buildbot.sh, pas leur propre buildbot start
.
Donc la question est, comment composer les instructions ENTRYPOINT/CMD
dans le Dockerfile qui s'exécute simplement buildbot start
.
ADDITIF 1
Dockerfile
contenu
FROM alpine:3.4
ENV BASE_DIR=/var/lib/buildbot SRC_DIR=/usr/src/buildbot
COPY start $SRC_DIR/
RUN \
echo @testing http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
echo @community http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
apk add --no-cache \
python \
py-pip \
py-twisted \
py-cffi \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
py-jinja2 \
tar \
curl && \
# install pip dependencies
pip install --upgrade pip setuptools && \
pip install "buildbot" && \
rm -r /root/.cache
WORKDIR $BASE_DIR
RUN \
adduser -D -s /bin/sh bldbotmaster && \
chown bldbotmaster:bldbotmaster .
VOLUME $BASE_DIR
CMD ["dumb-init", "/usr/src/buildbot/start","buildbot","master"]
ADDITIF 2
contenu du script start
#!/bin/sh
set -e
BASE_DIR=/var/lib/buildbot
if [[ "$1" = 'buildbot' && "$2" = 'master' ]]; then
if [ -z "$(ls -A "$BASE_DIR/master.cfg" 2> /dev/null)" ]; then
gosu bldbotmaster buildbot create-master -r $BASE_DIR
gosu bldbotmaster cp $BASE_DIR/master.cfg.sample $BASE_DIR/master.cfg
fi
exec gosu bldbotmaster buildbot start $BASE_DIR
fi
exec "[email protected]"
Pouvez-vous fournir votre fichier Docker qui a généré le journal spécifié? – rutsky
Merci pour la réponse rapide. Vous voilà. – utom
Et quel est le script 'start' que vous copiez de l'hôte vers l'image? – rutsky