如何在GitHub Docker Action中暴露SurrealDB容器端口?
解决GitHub Actions中SurrealDB容器端口暴露问题
一、修复服务容器的启动配置
服务容器支持通过entrypoint和command字段直接指定SurrealDB的启动参数,不需要额外自定义脚本。你可以这样配置:
test: name: Test runs-on: ubuntu-latest env: SURREAL_USER: ${{ secrets.SURREAL_USER }} SURREAL_PASS: ${{ secrets.SURREAL_PASS }} SURREAL_PORT: ${{ vars.SURREAL_PORT }} steps: - uses: actions/checkout@v4 # 其他步骤... services: db: image: surrealdb/surrealdb:latest # 直接指定SurrealDB启动命令 command: ["start", "--user", "${{ secrets.SURREAL_USER }}", "--pass", "${{ secrets.SURREAL_PASS }}", "--port", "8000", "file:///data/db"] ports: - "${{ vars.SURREAL_PORT }}:8000" # 可选:挂载数据卷避免数据丢失 volumes: - db-vol:/data volumes: db-vol:
配置后,后续测试步骤可以通过localhost:${{ vars.SURREAL_PORT }}访问SurrealDB。更简便的是,GitHub Actions会自动给服务容器分配主机名(即服务名db),你也可以直接用db:8000访问,无需映射宿主端口。
二、自定义Action的替代方案
Docker类型的Action运行在隔离容器中,无法直接向runner暴露端口。建议将自定义Action改为Composite Run Steps类型,直接在runner上用Docker命令启动容器,完全控制端口映射:
# action.yml name: '启动SurrealDB' inputs: surreal-user: description: "账号用户名" required: false default: "root" surreal-pass: description: "账号密码" required: false default: "root" surreal-port: description: "宿主暴露端口" required: false default: "8000" runs: using: "composite" steps: - name: 启动SurrealDB容器 shell: bash run: | docker run -d \ --name surrealdb-test \ -p ${{ inputs.surreal-port }}:8000 \ surrealdb/surrealdb:latest \ start --user ${{ inputs.surreal-user }} --pass ${{ inputs.surreal-pass }} --port 8000 file:///data/db - name: 等待SurrealDB就绪 shell: bash run: | until curl -s http://localhost:${{ inputs.surreal-port }}/health; do echo "等待SurrealDB启动..." sleep 2 done
在工作流中调用该Action后,后续测试步骤即可通过localhost:指定端口访问SurrealDB。
内容的提问来源于stack exchange,提问作者Caedan
相关产品推荐
相关产品推荐

