在docker build的一个步骤中在容器中运行后台进程

Tob*_*ann 3 ubuntu background-process docker dockerfile docker-build

我想在期间运行某个应用程序的集成测试docker build。这些测试要求Redis服务器可用。

redis-server在集成测试步骤(即gradle build?)中如何运行并使其在后台运行?

这是我的精髓Dockerfile

FROM ubuntu:16.04

# apt-get install stuff
# ...
# install gradle
# build and install redis

WORKDIR /app
ADD . /app

# TODO: start redis-server

# run unit tests / integration tests of app
RUN /opt/gradle/gradle-4.6/bin/gradle build --info

# TODO: stop redis-server

# build app
RUN ./gradlew assemble

# start app with
# docker run
CMD ["java", "-jar", "my_app.jar"]
Run Code Online (Sandbox Code Playgroud)

Tob*_*ann 6

正如Halfer评论中指出的那样,这不是好习惯。

但是为了完整起见,我还是想分享一个原始问题的解决方案:

RUN nohup bash -c "redis-server &" && sleep 4 && /opt/gradle/gradle-4.6/bin/gradle build --info
Run Code Online (Sandbox Code Playgroud)

redis-server仅在此单层上运行。的sleep 4是就在那里给的Redis足够的时间启动。

因此,Dockerfile则如下所示:

FROM ubuntu:16.04

# apt-get install stuff
# ...
# install gradle
# build and install redis

WORKDIR /app
ADD . /app

# run unit tests / integration tests of app
RUN nohup bash -c "redis-server &" && sleep 4 && /opt/gradle/gradle-4.6/bin/gradle build --info

# TODO: uninstall redis

# build app
RUN ./gradlew assemble

# start app with
# docker run
CMD ["java", "-jar", "my_app.jar"]
Run Code Online (Sandbox Code Playgroud)