我的 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 由 保存在 Maven 属性
docker.container.elasticsearch.ip
中docker-maven-plugin
,参见5.2。码头工人:开始。 - 网络是默认的
bridge
,见5.2.5。网络。 - 我无法将 GitLab 的运行器更改为在 Docker 中使用 Docker,请参阅使用 Docker-in-Docker 工作流和 Docker 执行器。
- 我无法将 GitLab 的运行器更改为使用 shell 执行模式,请参阅使用 shell 执行器
日志
[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 和开发人员机器使用一种配置?