如何在Docker中运行的Karaf上执行命令?

时间:2016-05-11 07:03:55

标签: docker apache-karaf

我正在设置当前在docker容器中运行Apache karaf。我使用以下代码来创建docker镜像。

FROM java:8-jdk
MAINTAINER mkroli
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV KARAF_VERSION=4.0.5

RUN wget http://apache.openmirror.de/karaf/${KARAF_VERSION}/apache-karaf-${KARAF_VERSION}.tar.gz; \
mkdir /opt/karaf; \
tar --strip-components=1 -C /opt/karaf -xzf apache-karaf-${KARAF_VERSION}.tar.gz; \
rm apache-karaf-${KARAF_VERSION}.tar.gz; \
mkdir /deploy; \
sed -i 's/^\(felix\.fileinstall\.dir\s*=\s*\).*$/\1\/deploy/' /opt/karaf/etc/org.apache.felix.fileinstall-deploy.cfg

VOLUME ["/deploy"]
EXPOSE 1099 8101 44444
ENTRYPOINT ["/opt/karaf/bin/karaf"]

我的Docker容器启动并运行了Karaf。一旦启动了Karaf,我需要在karaf中运行基本命令(例如:feature:list,feature:install),这样我就可以安装我的功能/包并列出它们。

  1. 我尝试在交互式shell中运行命令,但问题是我无法回到docker shell,如果我回来,Karaf容器会停止。
  2. 那么如何在Docker中运行的Karaf上执行命令?

4 个答案:

答案 0 :(得分:1)

更改您的dockerfile并添加以下内容

ENTRYPOINT ["/opt/apache/karaf/bin/start"]

答案 1 :(得分:0)

如何ssh到你的docker-Karaf Image并从那里发出shell命令?但请确保您为ssh导出该端口:

EXPOSE 8081

答案 2 :(得分:0)

您应该从主机访问karaf 8101是容器内使用的端口。 尝试此命令以交互模式运行容器

docker run -it -p 8101:8080 mkroli/karaf 

您可以使用-d选项在backgroud中运行此容器。

答案 3 :(得分:0)

在Jean-BaptisteOnofré的博客文章Apache Karaf & Docker中,他展示了如何在Docker容器中设置和运行Apache Karaf

使用his build.sh script通过运行以下命令来创建容器:

build.sh --from-release --karaf-version 4.2.7 --image-name karaf

然后,您可以使用以下命令在容器中运行Karaf控制台:

docker-compose run karaf

enter image description here

Voila! :)