docker-compose文件无法从私有nexus存储库下载maven依赖项

时间:2019-04-01 09:42:00

标签: docker docker-compose

当前,我正在使用不支持多版本的docker ee。所以我正在使用命名卷来存储来自一个容器的数据,并将相同的数据用于另一个容器。 我制作了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 :(得分:0)

您说单独运行它们时,它们可以正常工作。您可以发布用于该命令的命令吗?

可能是您在其中使用了未放入docker-compose中的参数。

另一件事:docker-compose创建自己的网络,该网络通常是桥接网络,但在您的计算机上可能具有不同的设置。您可以检查计算机上配置的网络:

docker network ls

答案 1 :(得分:0)

当从 Dockerfile 构建映像时,您可以使用environemnt变量动态传递值,如here所示。

类似地,您可以使用 args 将变量从 compose.yml 传递到其启动的容器,如下所示(从here引用):

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

现在,“ var1”和“ var2”将被发送到构建环境。

此外,您也可以尝试以下方法,因为 docker-compose 还支持变量替换(Reference)。

Compose使用运行 docker-compose 的shell环境中的变量值。例如,假设外壳包含HOST_NAME=test.org,并且您在docker-compose.yml文件中提供了以下配置:

    db:
      image: "test:${HOST_NAME}"

答案 2 :(得分:0)

最后找到了您只需添加以下行的解决方案-

network_mode:“网桥”

根据我的docker compose文件-

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: