Dockerfile для запуска сервера ревизии пакетов (PR) - PullRequest
0 голосов
/ 04 мая 2018

Целью является развертывание yocto PR-сервера с использованием док-контейнера. Более подробную информацию о PR-сервере можно найти по ссылке :

Чтобы попытаться это сделать, я написал этот «Dockerfile» для генерации образа Docker:

FROM ubuntu:16.04
MAINTAINER Yocto <yocto@mydomain.com>

# Update, upgrade and install
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y gawk wget git git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat xterm curl parted python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev net-tools

# Set up locales
RUN apt-get -y install locales apt-utils sudo && dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.utf8

# Clean up APT when done
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Replace dash with bash
RUN rm /bin/sh && ln -s bash /bin/sh

# Yocto user management
RUN groupadd -g 1000 yocto && useradd -u 1000 -g 1000 -ms /bin/bash yocto && usermod -a -G sudo yocto && usermod -a -G users yocto
ENV HOME /home/yocto
USER yocto

# Download poky
RUN git clone --branch rocko git://git.yoctoproject.org/poky /home/yocto/poky

# Create some directories
RUN mkdir -p /home/yocto/build /home/yocto/prserv

# Make /home/yocto/poky the working directory
WORKDIR /home/yocto/poky

# Expose listen port
EXPOSE 8585

# Run PR-server
CMD /bin/sh -c " \
    source ./oe-init-build-env ../build \
    && bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585 \
"

Используя предыдущий Dockerfile, я создаю образ Docker:

$ docker build -t docker-prserver .
[...]
Successfully built 362f4599b1b6
Successfully tagged docker-prserver:latest

Как вы могли видеть ранее, процесс завершается успешно. После этого я запускаю контейнер:

$ docker run -ti docker-prserver
yocto@b3c9fd06d8af:~/poky$

Предыдущая команда создает оболочку. Я проверяю, запущен ли процесс «bitbake-prserver»:

$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State 

Как видите, процесс «bitbake-prserver» не запущен (нет порта прослушивания). Однако, если я войду в контейнер и выполню команду CMD:

yocto@b3c9fd06d8af:~/poky/build$ source ./oe-init-build-env ../build/ && bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585

Тогда все работает нормально:

yocto@b3c9fd06d8af:~$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address    State      
tcp        0      0 0.0.0.0:8585            0.0.0.0:*          LISTEN     

Предполагается, что CMD выполняется, когда создается экземпляр контейнера, но этого не происходит. Как правильно написать Dockerfile для запуска сервера bitbake-prserv, прослушивающего незащищенный порт?

Надеюсь, что некоторые из вас имеют некоторый опыт в этом и могут предоставить любую полезную обратную связь.

Заранее большое спасибо! :)

1 Ответ

0 голосов
/ 04 мая 2018

Я нашел правильный способ исправить мою проблему. Сначала я написал этот скрипт:

$ cat start.sh 
#! /bin/sh

cd /home/yocto/poky
source ./oe-init-build-env ../build
bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585
tail -f /tmp/prserv.log

И после внесения изменений в Dockerfile добавим этот материал:

ADD start.sh /home/yocto/start.sh
RUN chmod 755 /home/yocto/start.sh
RUN chown yocto.yocto /home/yocto/start.sh
...
CMD /home/yocto/start.sh

Теперь все работает как положено. Надеюсь, это поможет кому-то еще!

...