Docker том не работает с Docker -создать для создания документации Doxygen - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь сгенерировать 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

Вот docker-compose с сервисом do c:

version: "3"

services:
  doc:
    build: ./doc
    volumes:
      - ./documentation:/doc

В контейнере генерируется do c, создается новый каталог с именем "document", но он пуст. Как я могу решить, чтобы он был заполнен сгенерированной документацией из контейнера?

1 Ответ

1 голос
/ 01 марта 2020

Цель - сгенерировать документацию в контейнере и получить сгенерированные файлы локально.

Вы используете локальный каталог в качестве источника монтирования здесь: - ./documentation:/doc.
Это сделает каталог /doc в контейнере синхронизированным с ./documentation на хосте. но источником контента является хост, а не контейнер.
Чтобы получить сгенерированные файлы на хосте, вы можете использовать именованный том вместо:

volumes:
   - documentation-doxygen:/doc

После запуска контейнера вы можете получить больше информация об этом томе (местоположение среди прочего) с docker volume inspect documentation-doxygen.

Но если вы монтируете том только для того, чтобы получить созданную папку, я думаю, что вам вообще не нужно использовать том.
Более простой альтернативой является просто копирование папки на хосте. после запуска контейнера:

docker copy DOC_CONTAINER_ID:/doc ./documentation-doxygen  

В качестве другой альтернативы, если вы хотите выполнить doxygen Doxyfile в локальном контексте с точки зрения папки, но в контейнере (возможно, в локальной среде), вы можете заменить RUN BY CMD или ENTRYPOINT, чтобы выполнить ее в качестве команды запуска контейнера и смонтировать текущий каталог в качестве привязки.
Это сэкономит вам несколько копий в 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 -компонентная часть:

version: "3"

services:
  doc:
    build: ./doc
    volumes:
      - ./:/doc

Здесь ./ указано для использования в качестве источника связывания базового каталога контекста службы doc.

...