Github Actions工作流程中无法访问本地主机

4

我创建了一个Spring示例,并尝试将应用程序构建为Docker镜像,并在Github actions工作流中在Docker容器中运行该应用程序。然后,我进行了简单的Smoke测试,以确保图像按预期创建。

Docker镜像是由Spring Boot Maven插件构建的。

我创建了一个简单的docker-compose文件来同时运行应用程序和数据库。

version: "3.5" # specify docker-compose version, v3.5 is compatible with docker 17.12.0+

# Define the services/containers to be run
services:
 
  db:
    image: mysql:8
    ports:
      - "3306:3306"
 #   command: --default-authentication-plugin=mysql_native_password  
    environment:
      MYSQL_ROOT_PASSWORD: mysecret
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: testdb
    volumes:
      - ./data/mysql:/var/lib/mysql    
      - ./mysql-initdb.d:/docker-entrypoint-initdb.d
  app:
    image: hantsy/rest-many-to-many-example
    depends_on:
      - db
    ports:
      - "8080:8080"
    environment:
      - "SPRING_PROFILES_ACTIVE=dev"
      - "SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/testdb"

在Github Actions工作流文件中,当运行docker-compose命令时,似乎无法通过localhost访问。我创建了一个Java测试,并使用curl命令进行测试,在相同的流程中都无法连接到http://localhost:8080。
请查看完整的Github actions workflow文件
我还尝试使用PublicIP actions获取公共IP并通过公共IP进行访问,但失败了。请在此处查看公共IP actions步骤配置here但是在我的本地机器上,访问http://localhost:8080正常工作。

你能给我们展示一下你的Github actions步骤吗? - TheQueenIsDead
嘿!你是不是完全没有使用“services”,而是手动使用“docker-compose up”来解决了问题? - Lev
3个回答

3
值得注意的是,公共操作似乎更适用于向您显示运行程序的 IP,以便允许流量流向另一个服务,而不是允许公共流量进入。
此操作允许您将运行程序的地址列入白名单,并在流水线完成后将其删除。
我想您可能无法访问端口,因为您的Github操作可能在容器中运行。如果是这种情况,则localhost将指向您所在容器的回环,而不是底层主机端口。
如果您只是要进行简单的烟雾测试,那么您可能可以通过调用 docker exec container_id curl locahost/status,或者测试与数据库连接等同的健康检查来实现相同的结果。

我使用了默认的Ubuntu虚拟机作为运行器,请查看原帖中完整的Github Actions工作流文件链接。 - Hantsy

2

不要使用"localhost",而是使用服务名称,例如:

http://app:8080

或者

app:8080

这对我很有效。


你可以查看哪些端口是开放的以及主机名是什么:运行命令:netstat -lt - Rob Sedgwick
在GitHub Action中,你可以使用与你运行服务的相同端口。 - haxora
这个,一千次的这个。 - nbpeth

1

我在使用 Node.js 客户端访问 GitHub Action 期间遇到了一个相关问题,无法访问 localhost:6666 上的服务器。

通过 localhost 替换为 127.0.0.1,问题得以解决


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接