当前位置: 首页 > 知识库问答 >
问题:

Dockerfile无法正确运行CMD或端口未公开

麻阳
2023-03-14

我不想和Dockerfiles玩一玩。所以我试着在Docker中运行ApacheNIFI。我知道已经有一个集装箱可用,这是用于培训目的。我将Dockerfile配置如下:

FROM openjdk:8-jre-alpine
COPY . /app
WORKDIR /app
EXPOSE 8080
CMD ["sh","nifi-1.9.0/bin/nifi.sh","start"]

现在,这似乎可行,但当我尝试使用以下命令运行容器时:

docker build --tag nifid .
docker run --name nifi-app -p 8080:8080 nifid

它似乎正在运行,但端口既没有暴露,也无法通过localhost:8080访问应用程序。对如何进行有什么建议吗?这就是docker ps——都给我看的

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
ccf75612d5ac        nifid               "sh nifi-1.9.0/bin/n…"   20 hours ago        Exited (0) 20 hours ago                       nifi-app

我意识到应用程序现在很激动。我在Dockerfile有什么问题吗?

编辑:docker日志[容器ID]如下所示:

Java home: /usr/lib/jvm/java-1.8-openjdk/jre
NiFi home: /app/nifi-1.9.0

Bootstrap Config File: /app/nifi-1.9.0/conf/bootstrap.conf

编辑:找到了一个不错的“文档”https://hub.docker.com/r/apache/nifi/dockerfile

有点深奥,但应该适合这份工作

共有2个答案

田普松
2023-03-14

容器需要一个pid 0进程才能永远运行,直到终止或出现错误。

请参考https://stackoverflow.com/a/45450456/1926952以保持容器运行

郎弘业
2023-03-14

您的容器似乎已停止(状态已退出)

docker ps (shows running containers)
docker ps -a (shows all containers, even stopped)

尝试

docker logs <container-id> 

查看容器的输出。它将正确地告诉您容器停止的原因。

 类似资料:
  • 我正在开发一个android和iOS应用程序,需要有一个RESTful服务器端。直到今天,我在eclipse上使用Jersey和RunJettyRun,但我决定开始使用新的更好的东西!我搬到了DropWizard和IntelliJ IDEA 这些是我安装的软件和我已经处理的事情:-Java 8-Maven 3.1.1-Maven和Java的环境变量。 现在,我所做的是跟随他们网站上的DropWiz

  • 问题内容: 我是编程(和Python)新手。我无法在WinXP 64位笔记本电脑的命令提示符下运行任何python脚本。我分配了路径并通过输入set path确认了。我有Python32。我收到以下消息: 以下是我尝试的脚本: 问题答案: 你应该输入这个 在dos / cmd提示符下,而不是在Python解释器中

  • 我正在使用DB2 V10.5(windows),试图尝试使用Liquibase。 我正在使用liquibase-3.5.3-bin。我用以下参数设置了liquibase.properties文件。 我无法设置类路径使用多个罐。所以当我奔跑时 我得到了丢失snakeyaml jar的错误 我为类路径尝试的选项: 但不知何故,它不起作用。 当我运行Liquibase时,有人能建议我如何设置类路径,以便

  • 问题内容: 我在Docker中设置了一个简单的节点服务器。 Docker文件 example.js 现在建立图像 现在在容器中运行 验证容器正在运行并且端口已映射: 现在,让我们附加到容器并验证服务器是否在其中运行: 并在容器命令行中输入: 看起来不错吧? 问题 当我在主机上执行相同的curl命令(或使用浏览器导航到http:// localhost:1337 )时,什么都看不到。 知道为什么容器

  • 是否可以为已经运行的pod额外公开端口?如果我创建一个新的pod,我会为它们提供podman pod创建...-p 8080:80。 但是,我不想扔掉我的pod,只需修改它以暴露另一个端口。

  • 问题内容: 试图安装elasticsearch并在我的dockerfile中遇到错误。似乎无法运行bin。 docker的新事物,因此将不胜感激任何帮助。我正在运行root用户,因此无需在任何这些命令前添加sudo。 问题答案: 像这样安装密钥似乎存在问题。这里和这里都有类似的问题。 建议的解决方案是像这样拆分命令: 就您而言,我怀疑命令的输出不是关键。可能是其他原因(例如代理响应)或错误。尝试删