saw*_*303 4 micronaut github-actions
在下面的 GitHub Actions 工作流程中,我执行了一个 Gradle 构建,该构建针对 Micronaut 应用程序运行集成测试。该应用程序依赖于
security/image:0.1.15jobs:
build-test:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '15' ]
services:
tempoapp-db:
image: mariadb:10.4.15
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: foo
MYSQL_DATABASE: xoxo
MYSQL_USER: bar
MYSQL_PASSWORD: foobar
security:
image: security/image:0.1.15
env:
JAVA_TOOL_OPTIONS: "-Dcallback.url=http://<what to place here?>:8090"
credentials:
username: ${{ secrets.PACKAGES_USER }}
password: ${{ secrets.PACKAGES_TOKEN }}
ports:
- 6000:8080
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java }}
- name: Build and test the application
run: ./gradlew -s check publishToMavenLocal dockerPrepare
Run Code Online (Sandbox Code Playgroud)
在集成测试阶段,security/image:0.1.15需要 Docker 容器来访问在 Docker 主机上运行的 Micronaut 应用程序。在我的 Docker 桌面环境中,我通常使用主机名host.docker.internal来从容器访问主机。这似乎不适用于 GitHub Actions,因为我收到以下错误
io.micronaut.http.client.exceptions.HttpClientException: Connect Error: host.docker.internal: Name does not resolve
at io.micronaut.http.client.netty.DefaultHttpClient.lambda$null$34(DefaultHttpClient.java:1119)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
Run Code Online (Sandbox Code Playgroud)
有没有办法获取主机的IP地址或主机名?
security:
image: security/image:0.1.15
env:
JAVA_TOOL_OPTIONS: "-Dcallback.url=http://<what to place here?>:8090"
Run Code Online (Sandbox Code Playgroud)
TL;DR:使用 172.17.0.1 访问您的 Docker 主机。
我已经设法解决了我的问题。这个答案给了我正确方向的提示(/sf/answers/4251869821/)
AFAIK,在 Docker for Linux(标准发行版)的情况下,主机的 IP 地址将始终为 172.17.0.1(在 docker 的主网络上,请参阅评论以了解更多信息)。
为了验证这一点,我添加了一个额外的工作流程步骤,启动 Alpine Linux 容器并打印 Docker 主机 IP(感谢@Nek)
iproute2包(安静地)--rmarg)- name: Find Docker Host IP
uses: addnab/docker-run-action@v1
with:
image: alpine:latest
run: apk update > /dev/null && apk add iproute2 > /dev/null && ip -4 route show default | cut -d' ' -f3
Run Code Online (Sandbox Code Playgroud)
正如您在下面的屏幕截图中看到的,IP 是172.17.0.1。
所以我将 IP 添加到容器JAVA_TOOL_OPTIONS的环境变量中security,一切正常。
jobs:
build-test:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '15' ]
services:
tempoapp-db:
image: mariadb:10.4.15
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: foo
MYSQL_DATABASE: xoxo
MYSQL_USER: bar
MYSQL_PASSWORD: foobar
security:
image: security/image:0.1.15
env:
JAVA_TOOL_OPTIONS: "-Dcallback.url=http://172.17.0.1:8090"
credentials:
username: ${{ secrets.PACKAGES_USER }}
password: ${{ secrets.PACKAGES_TOKEN }}
ports:
- 6000:8080
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java }}
- name: Build and test the application
run: ./gradlew -s check publishToMavenLocal dockerPrepare
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3437 次 |
| 最近记录: |