GNU/Linux >> Linux の 問題 >  >> Linux

Mac 上の docker で maven を実行するために、docker イメージを .m2 ディレクトリにポイントするにはどうすればよいですか?

ビルド ステップで .m2 フォルダーを共有するには、settings.xml の localRepository 値を上書きします。

以下は、Docker でローカル .m2 リポジトリを共有するために使用した Dockerfile スニペットです。

FROM maven:3.5-jdk-8 as BUILD

RUN echo \
    "<settings xmlns='http://maven.apache.org/SETTINGS/1.0.0\' \
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
    xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd'> \
        <localRepository>/root/Users/myname/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /usr/share/maven/conf/settings.xml;

COPY . /usr/src/app
RUN mvn --batch-mode -f /usr/src/app/pom.xml clean package

FROM openjdk:8-jre
EXPOSE 8080 5005
COPY --from=BUILD /usr/src/app/target /opt/target
WORKDIR /opt/target
ENV _JAVA_OPTIONS '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
ENV swarm.http.port 8080

CMD ["java", "-jar", "app-swarm.jar"]

<ブロック引用>

Mac 上の docker で maven を実行するために、docker イメージを .m2 ディレクトリにポイントするにはどうすればよいですか?

むしろ、ホスト フォルダー (/Users/myname/.m2 など) を コンテナー にポイントします。 フォルダー (画像ではありません)

「ホスト ディレクトリをデータ ボリュームとしてマウントする」を参照してください:

<ブロック引用>

-v を使用してボリュームを作成することに加えて、 Docker デーモンのホストからコンテナーにディレクトリをマウントすることもできます。 .

$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
<ブロック引用>

このコマンドは、ホスト ディレクトリ /Users/myname/.m2 をマウントします。 、/root/.m2 のコンテナーに .
パス /root/.m2 の場合 /Users/myname/.m2 はコンテナのイメージ内にすでに存在します オーバーレイをマウントしますが、既存のコンテンツは削除しません。
マウントが削除されると、コンテンツに再びアクセスできるようになります。
これは、マウント コマンドの予想される動作と一致しています。


以下は Dockerfiles と docker-compose for example プロジェクトで、1 つのスプリング サービスとその他のサービスが含まれています。

Spring サービス dockerfile

FROM maven:3.5-jdk-8-alpine 

WORKDIR /app

COPY . src

CMD cd src ; mvn spring-boot:run

docker-compose.yml

version: '3'

services:

  account-service:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - "${HOME}/.m2:/root/.m2"

ここで docker-compose で、ローカル .m2 リポジトリとコンテナー 1 のボリュームを作成します。


Linux
  1. OpenStack用のWindowsイメージを作成する方法

  2. Dockerfileを使用してDockerイメージを構築する方法

  3. 複数のユーザーのディレクトリを chown する方法は?

  1. Dockerイメージに変更をコミットする方法

  2. 実行中のコンテナのホスト名を指定するには?

  3. Docker コンテナーで実行されている OS はどれですか?

  1. Linuxですべてのユーザーの共有ディレクトリを作成する方法

  2. 実行中のDockerコンテナでコマンドを実行する方法

  3. Dockerイメージを変更する方法