【发布时间】:2016-12-23 10:25:27
【问题描述】:
我正在尝试编写在 ENTRYPOINT/CMD Dockerfile 指令中运行 buildbot start 的最简单的 docker buildbot 主映像。
我尝试使用dumb-init、gosu 和exec 的很多组合,但没有成功。
情况如下:
-
当我尝试使用命令
docker run -d -v $local/vol/bldbot/master:/var/lib/buildbot buildbot-master-test运行 deamonized buildroot 时,容器成功启动,但它突然终止。日志如下:[时间戳] [-] 日志已打开。
[时间戳] [-] twistd 16.0.0 (/usr/bin/python 2.7.12) 正在启动。
[时间戳] [-] 反应器类:twisted.internet.epollreactor.EPollReactor。
[时间戳] [-] 启动 BuildMaster -- buildbot.version: 0.9.2
[时间戳] [-] 从“/var/lib/buildbot/master.cfg”加载配置
[时间戳] [-] 使用 URL 'sqlite:/state.sqlite' 设置数据库
[时间戳] [-] 将数据库日志模式设置为“wal”
[时间戳] [-] 为 master 1 做家务 c8aa8b0d5ca3:/var/lib/buildbot
[时间戳] [-] 添加 1 个新的变更源,删除 0
[时间戳] [-] 添加 1 个新构建器,删除 0 个
[时间戳] [-] 添加 2 个新调度程序,删除 0
[时间戳] [-] 此主服务器上未配置 Web 服务器
[时间戳] [-] 添加 1 个新工人,移除 0 个
[时间戳] [-] PBServerFactory 从 9989 开始
[时间戳] [-] 开始工厂
[时间戳] [-] BuildMaster 正在运行 当我使用命令
docker run --rm -it -v $local/vol/bldbot/master:/var/lib/buildbot buildbot-master-test /bin/sh在交互模式下运行容器,然后运行命令buildbot start时,一切都像魅力一样。
我已经研究过官方buildbot master docker镜像的内容,即buildbot/buildbot-master。我看到作者决定在start_buildbot.sh 中使用命令exec twistd -ny $B/buildbot.tac,而不是他们自己的buildbot start。
所以问题是,如何在只运行buildbot start 的Dockerfile 中编写ENTRYPOINT/CMD 指令。
附录 1
Dockerfile内容
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 \
py-cryptography@community \
py-service_identity@community \
py-sqlalchemy@community \
gosu@testing \
dumb-init@community \
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"]
附录 2
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 "$@"
【问题讨论】:
-
您能否提供导致指定日志的 Dockerfile?
-
感谢您的快速回复。你来了。
-
你从主机复制到镜像的
start脚本里面有什么? -
再次感谢。你来了。
-
不带
exec或带CMD ["/usr/src/buildbot/start","buildbot","master"]的变体产生相同的效果。
标签: linux docker dockerfile buildbot