Apache/Nifi 1.12.1 Docker 图片问题
Apache/Nifi 1.12.1 Docker Image Issue
我有一个基于 apache/nifi:1.12.1
的 Docker 文件,想像这样扩展它:
FROM apache/nifi:1.12.1
RUN mkdir -p /opt/nifi/nifi-current/conf/flow
问题是,当我从 Linux 发行版(如 Ubuntu 和 CentOS)构建映像时,该文件夹并未创建。构建成功,我 运行 使用 docker run -it -d --rm --name nifi nifi-test
但是当我通过 docker exec
进入容器时,没有 flow
目录。
奇怪的是,当我通过 Windows 和 Docker 桌面构建图像时,flow
目录正在正常创建。我不明白为什么会这样。
我已经尝试过 USER nifi
或 RUN chown ...
之类的方法,但仍然...
为方便起见,这是基本图像:
https://github.com/apache/nifi/blob/rel/nifi-1.12.1/nifi-docker/dockerhub/Dockerfile
也看看这个:
This is what looks like at the CLI
提前致谢。
通过查看提供的 dockerfile,您可以看到以下卷定义
那么如果你 运行
docker image inspect apache/nifi:1.12.1
因此,执行运行命令在conf目录下创建文件夹成功
BUT 当您 运行 容器安装卷时,它们会覆盖安装点下的所有内容 /opt/nifi/nifi-current/conf
在你的例子中是 flow
目录。
您可以通过编辑 Dockerfile 来测试它
FROM apache/nifi:1.12.1
# this will be overriden, by volumes
RUN mkdir -p /opt/nifi/nifi-current/conf/flow
# this will be available in the container environment
RUN mkdir -p /opt/nifi/nifi-current/flow
要解决这个问题,您可以
- 克隆您用作基础镜像的 Dockerfile(在
FROM) 和 手动删除 VOLUME 指令。然后构建它并
在您的 FROM 中用作基础。
- 你可以尽量避免在Dockerfile指定的挂载点下添加目录
我有一个基于 apache/nifi:1.12.1
的 Docker 文件,想像这样扩展它:
FROM apache/nifi:1.12.1
RUN mkdir -p /opt/nifi/nifi-current/conf/flow
问题是,当我从 Linux 发行版(如 Ubuntu 和 CentOS)构建映像时,该文件夹并未创建。构建成功,我 运行 使用 docker run -it -d --rm --name nifi nifi-test
但是当我通过 docker exec
进入容器时,没有 flow
目录。
奇怪的是,当我通过 Windows 和 Docker 桌面构建图像时,flow
目录正在正常创建。我不明白为什么会这样。
我已经尝试过 USER nifi
或 RUN chown ...
之类的方法,但仍然...
为方便起见,这是基本图像: https://github.com/apache/nifi/blob/rel/nifi-1.12.1/nifi-docker/dockerhub/Dockerfile
也看看这个: This is what looks like at the CLI
提前致谢。
通过查看提供的 dockerfile,您可以看到以下卷定义
docker image inspect apache/nifi:1.12.1
因此,执行运行命令在conf目录下创建文件夹成功
BUT 当您 运行 容器安装卷时,它们会覆盖安装点下的所有内容 /opt/nifi/nifi-current/conf
在你的例子中是 flow
目录。
您可以通过编辑 Dockerfile 来测试它
FROM apache/nifi:1.12.1
# this will be overriden, by volumes
RUN mkdir -p /opt/nifi/nifi-current/conf/flow
# this will be available in the container environment
RUN mkdir -p /opt/nifi/nifi-current/flow
要解决这个问题,您可以
- 克隆您用作基础镜像的 Dockerfile(在 FROM) 和 手动删除 VOLUME 指令。然后构建它并 在您的 FROM 中用作基础。
- 你可以尽量避免在Dockerfile指定的挂载点下添加目录