Файл docker-compose не может загрузить зависимости maven из частного хранилища nexus - PullRequest
0 голосов
/ 01 апреля 2019

В настоящее время я использую docker ee, в котором не поддерживается multi build. Поэтому я использую именованный том для хранения данных из одного контейнера и использовать те же данные для другого контейнера. Я сделал 2 файла Docker, в которых 1 файл Docker получает проект из репозитория git, а во 2-м файле он использует maven для запуска этого проекта. Дело в том, что он работает нормально, когда вы запускаете их по отдельности, но затем я попытался с docker-compose, так как он не загружает зависимости из частного хранилища nexus. Я должен предоставить что-нибудь в порядке размещения файлов docker-compose, чтобы извлечь зависимости из частного репозиторий. Показывает неизвестный хост репозиторий

Dockerfile_git-

FROM alpine/git
MAINTAINER Tejas
RUN mkdir /root/.ssh/
ADD id_rsa /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan <<host>> >> ~/.ssh/known_hosts
WORKDIR /share
RUN git clone <<url>>

Dockerfile_mvn-

FROM maven:3.5-jdk-8-alpine
MAINTAINER Tejas
WORKDIR /share/trainingcontainers/
RUN echo $MAVEN_HOME
RUN rm -f $MAVEN_HOME/conf/settings.xml
COPY ./settings.xml $MAVEN_HOME/conf/
WORKDIR /share/trainingcontainers/selenium-grid/Website_Login
CMD mvn clean install
version: "3"
services:
  task1:
    build:
      context: .
      dockerfile: Dockerfile_git
    volumes:
      - "myshare2:/share"
  task2:
    build:
      context: .
      dockerfile: Dockerfile_mvn
    volumes:
      - "myshare2:/share"
volumes:
    myshare2:

Создание файлов журналов-

task2_1  | [INFO] --------------------< Website_Login:Website_Login >---------------------
task2_1  | [INFO] Building Website_Login 0.0.1-SNAPSHOT
task2_1  | [INFO] --------------------------------[ jar ]---------------------------------
task2_1  | Downloading from nexus: http://<<hostname>>/repository/maven-public/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
task2_1  | [INFO] ------------------------------------------------------------------------
task2_1  | [INFO] BUILD FAILURE
task2_1  | [INFO] ------------------------------------------------------------------------
task2_1  | [INFO] Total time: 6.003 s
task2_1  | [INFO] Finished at: 2019-04-01T10:15:01Z
task2_1  | [INFO] ------------------------------------------------------------------------
task2_1  | [ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to nexus (http://<<hostname>>/repository/maven-public/): <<hostname>>: Try again: Unknown host <<hostname>>: Try again -> [Help 1]

settings.xml -

<mirrors>
        <mirror>
            <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://<<hostname>>/repository/maven-public/</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- Optional URL to server. Default value is http://localhost:9000 -->
            <sonar.host.url>
                http://localhost:9000
            </sonar.host.url>
        </properties>
    </profile>
    <activeProfiles>
        <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019

Вы можете использовать переменные environemnt для динамической передачи значения при построении изображения из Dockerfile , как показано здесь .

Аналогичным образом вы можете использовать args для передачи переменных из compose.yml в контейнер, который начинается, как показано ниже (см. здесь ):

 services:
  web:
    build:
      context: .
      args:
        var1: c
        var2: d

Теперь «var1» и «var2» будут отправлены в среду сборки.

Также вы можете попробовать следующий подход, так как docker-compose также поддерживает подстановку переменных ( Reference ).

Compose использует значения переменных из среды оболочки, в которой запускается docker-compose . Например, предположим, что оболочка содержит HOST_NAME=test.org, и вы указали эту конфигурацию в файле docker-compose.yml:

    db:
      image: "test:${HOST_NAME}"
0 голосов
/ 10 апреля 2019

Наконец-то найдено решение, вам просто нужно добавить следующую строку -

network_mode: "bridge"

Согласно моему файлу составления докера -

version: "3"
services:
  task1:
    build:
      context: .
      dockerfile: Dockerfile_git
    volumes:
      - "myshare2:/share"
  task2:
    build:
      context: .
      dockerfile: Dockerfile_mvn
    network_mode: "bridge"
    volumes:
      - "myshare2:/share"
volumes:
    myshare2:
0 голосов
/ 01 апреля 2019

Вы говорите, что они работают нормально, когда вы запускаете их отдельно. Можете ли вы опубликовать команды, которые вы используете для этого?

Возможно, вы используете параметр, который вы не указали в docker-compose.

Еще одна вещь: docker-compose создает свою собственную сеть, которая обычно является мостовой сетью, но она может иметь другие настройки на вашем компьютере. Вы можете проверить сети, настроенные на вашем компьютере:

docker network ls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...