【发布时间】:2026-01-25 15:10:02
【问题描述】:
我正在一个 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),以便我可以安装我的功能/捆绑包并列出它们。
- 我尝试在交互式 shell 中运行命令,但问题是我无法返回 docker shell,如果我返回 Karaf 容器会停止。
那么如何在 Docker 内运行的 Karaf 上执行命令呢?
【问题讨论】:
-
您尝试
docker exec -it container_id bash然后启动您的命令了吗?文档docs.docker.com/engine/reference/commandline/exec -
请记住,
docker run Karaf bash会启动一个新容器,它不会进入您正在运行的 Karaf 容器 -
如果我通过 exec 或 run 这样做,我可以进入 karaf shell,但是如果我尝试进入 docker shell,我需要注销(这会停止 Karaf 服务器)并且句柄会进入 docker 容器。
标签: docker apache-karaf