我正在尝试使用Doxygen
在Dockerfile
中生成Docker-compose
文档,以同时运行所有服务。
目的是在容器中生成文档并在本地检索生成的文件。
这是我的Dockerfile
:
FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y doxygen doxygen-gui doxygen-doc graphviz
WORKDIR /doc
COPY Doxyfile .
COPY logo.png .
RUN doxygen Doxyfile
这是带有doc服务的
docker-compose
:version: "3"
services:
doc:
build: ./doc
volumes:
- ./documentation:/doc
在容器上生成doc,并生成一个名为“documentation”的新目录,但该目录为空。如何解决将其填充到容器中生成的文档的问题?
最佳答案
您可以在此处使用本地目录作为安装源:- ./documentation:/doc
。
它将使容器上的/doc
目录与主机上的./documentation
同步,但是内容的来源是主机,而不是容器。
要在主机上获取生成的文件,可以使用命名卷代替:
volumes:
- documentation-doxygen:/doc
容器运行后,您可以使用
docker volume inspect documentation-doxygen
获得有关该卷的更多信息(位置等等)。但是,如果仅为了获取创建的文件夹而挂载该卷,则我认为根本不需要使用该卷。
一个更简单的选择就是在容器运行后简单地在主机上复制文件夹:
docker copy DOC_CONTAINER_ID:/doc ./documentation-doxygen
作为另一种选择,如果要在本地上下文中使用文件夹但在容器中执行
doxygen Doxyfile
(在本地环境中可能),可以用RUN
或CMD
替换ENTRYPOINT
以将其作为容器启动命令执行并挂载当前目录作为绑定(bind)安装。它将为您保留
Dockerfile
中的一些副本。FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y doxygen doxygen-gui doxygen-doc graphviz
WORKDIR /doc
# REMOVE THAT COPY Doxyfile .
# REMOVE THAT COPY logo.png .
ENTRYPOINT doxygen Doxyfile
还有docker-compose部分:
version: "3"
services:
doc:
build: ./doc
volumes:
- ./:/doc
在这里,指定
./
用作doc
服务上下文的基本目录作为绑定(bind)源。