私の Spring Boot アプリケーションは ElasticSearch を使用しているため、統合テストのために ElasticSearch のインスタンスを開始する必要があります。ElasticSearchの Docker コンテナーを起動するには、を使用しますdocker-maven-plugin
。統合テストは、GitLab と開発者のマシンで動作するはずです。
私のコードは、Unix ソケットを使用して GitLab の Runner (Docker コンテナー) で動作しますが ( Docker ソケット バインディングの使用を参照)、開発者のマシンでは動作しません。
Docker コンテナー ( ) の内部 IP アドレスは、172.17.0.2
Docker Desktop for Windows (Docker ホスト) では認識されません。Docker Desktop for Windows のネットワーク機能 を参照してください。
ソース
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<registry>docker.elastic.co</registry>
<imagePullPolicy>always</imagePullPolicy>
<images>
<image>
<alias>elasticsearch</alias>
<name>elasticsearch/elasticsearch:7.6.2</name>
<run>
<env>
<discovery.type>single-node</discovery.type>
</env>
<wait>
<http>
<url>http://${docker.container.elasticsearch.ip}:9200</url>
<method>GET</method>
<status>200</status>
</http>
<time>60000</time>
</wait>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker:start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>docker:stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
追加情報
- 内部 IP は、
docker.container.elasticsearch.ip
によってMaven プロパティに保存されます。5.2docker-maven-plugin
を参照してください。docker:start . - ネットワークはデフォルト
bridge
で です。5.2.5 を参照してください。ネットワーク。 - Docker で Docker を使用するように GitLab のランナーを変更できません。 Docker executor で Docker-in-Docker ワークフローを使用する を参照してください。
- シェル実行モードを使用するように GitLab のランナーを変更できません。「シェル エグゼキュータを使用する」を参照してください。
ログ
[INFO] DOCKER> Pulling from elasticsearch/elasticsearch
[INFO] DOCKER> Digest: sha256:59342c577e2b7082b819654d119f42514ddf47f0699c8b54dc1f0150250ce7aa
[INFO] DOCKER> Status: Image is up to date for docker.elastic.co/elasticsearch/elasticsearch:7.6.2
[INFO] DOCKER> Pulled elasticsearch/elasticsearch:7.6.2 in 2 seconds
[INFO] DOCKER> [elasticsearch/elasticsearch:7.6.2] "elasticsearch": Start container 121efac6ba65
[INFO] DOCKER> [elasticsearch/elasticsearch:7.6.2] "elasticsearch": Waiting on url http://172.17.0.2:9200 with method GET for status 200.
[ERROR] DOCKER> [elasticsearch/elasticsearch:7.6.2] "elasticsearch": Timeout after 60700 ms while waiting on url http://172.17.0.2:9200
[ERROR] DOCKER> Error occurred during container startup, shutting down...
[INFO] DOCKER> [elasticsearch/elasticsearch:7.6.2] "elasticsearch": Stop and removed container 121efac6ba65 after 0 ms
[ERROR] DOCKER> I/O Error [[elasticsearch/elasticsearch:7.6.2] "elasticsearch": Timeout after 60700 ms while waiting on url http://172.17.0.2:9200]
リサーチ
- プロパティ からのポート マッピングと Docker ホストの IP アドレスの使用
docker.host.address
は、Unix ソケットでは機能しません。5.2.9 を参照してください。待って。 - ネットワークの使用
host
は、Docker Desktop for Windows では機能しません。ホスト ネットワークの使用を参照してください。
質問
docker-maven-plugin
GitLab と開発者のマシンに1 つの構成のみを使用することは可能ですか?