使用 Github Actions 连接自定义容器镜像的 Postgres 服务。

5
在我的Django项目中,我有一个CI工作流程用于运行测试,需要一个Postgres服务。最近,一个新的应用引入了更重的包,如pandas、matplotlib、pytorch等,这使得run-tests工作的时间从2分钟增加到12分钟,这是荒谬的。此外,在我的项目中,我有一个基础的Docker镜像,带有Python和这些较重的包,以加快镜像的构建速度。所以我想在运行步骤时在工作流程中使用同样的镜像,因为这些包已经加载了。
不幸的是,一切都很顺利,直到实际运行测试的步骤,因为似乎postgres服务没有与容器连接,我收到以下错误:
psycopg2.OperationalError: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

这是我当前的工作流程。有什么建议我做错了吗?

name: server-ci

on:
  pull_request:
      types: [opened]

env:
  DJANGO_SETTINGS_MODULE: settings_test

jobs:

  run-tests:
    name: Run tests

    runs-on: ubuntu-latest

    container:
      image: myimage/django-server:base
      credentials:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_PASSWORD }}
      ports:
        - 8000:8000

    services:
      postgres:
        image: postgres
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: admin
          POSTGRES_DB: mydb
        ports:
          - 5432:5432
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    env:
      POSTGRES_HOST: localhost
      POSTGRES_PORT: 5432
      POSTGRES_PASSWORD: admin
      POSTGRES_USER: postgres

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: /opt/venv
          key: /opt/venv-${{ hashFiles('**/requirements.txt') }}

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install -r requirements.txt

        if: steps.cache.outputs.cache-hit != 'true'
      - name: Run tests
        run: |
          ./manage.py test --parallel --verbosity=2
1个回答

5

原来工作流程现在在其自己的容器中运行,位于postgres容器旁边。因此,端口映射到运行程序的虚拟机上不再起作用(因为它影响主机而不是其中的Docker容器)。

作业和服务容器附加到同一个Docker网络,所以我只需要将POSTGRES_HOST更改为postgres(即服务容器的名称),然后Docker的DNS应该就可以完成剩下的任务。

来源:https://github.community/t/connect-postgres-service-with-custom-container-image/189994/2?u=everspader


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