spetz83
spetz83

Reputation: 532

Exit code 137 when running Github Action test Docker image

I am working through the Testdriven.io: Test-Driven Development with FastAPI and Docker course and am currently on the continuous integration section. In this section you use github actions to build your docker image and run tests and linting and what not.

During the Test Docker Image step of the flow I am receiving the following error when pytest is attempted: Error: Process completed with exit code 137

enter image description here

Workflow main.yml:

name: Continuous Integration and Delivery

on: [ push ]

env:
  IMAGE: docker.pkg.github.com/$(echo $GITHUB_REPOSITORY | tr '[A-Z]' '[a-z]')/summarizer

jobs:

  build:
    name: Build Docker Image
    runs-on: ubuntu-latest
    steps:
      - name: Checkout master
        uses: actions/[email protected]
      - name: Log in to GitHub Packages
        run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Pull image
        run: |
          docker pull ${{ env.IMAGE }}:latest || true
      - name: Build image
        run: |
          docker build \
            --cache-from ${{ env.IMAGE }}:latest \
            --tag ${{ env.IMAGE }}:latest \
            --file ./project/Dockerfile.prod \
            "./project"
      - name: Push image
        run: |
          docker push ${{ env.IMAGE }}:latest

  test:
    name: Test Docker Image
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Checkout master
        uses: actions/[email protected]
      - name: Log in to GitHub Packages
        run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Pull image
        run: |
          docker pull ${{ env.IMAGE }}:latest || true
      - name: Build image
        run: |
          docker build \
            --cache-from ${{ env.IMAGE }}:latest \
            --tag ${{ env.IMAGE }}:latest \
            --file ./project/Dockerfile.prod \
            "./project"
      - name: Run container
        run: |
          docker run \
            -d \
            --name fastapi-tdd \
            -e PORT=8765 \
            -e ENVIRONMENT=dev \
            -e DATABASE_TEST_URL=sqlite://sqlite.db \
            -p 5003:8765 \
            ${{ env.IMAGE }}:latest
      - name: Pytest
        run: docker exec fastapi-tdd python -m pytest tests
      - name: Flake8
        run: docker exec fastapi-tdd python -m flake8 .
      - name: Black
        run: docker exec fastapi-tdd python -m black . --check
      - name: isort
        run: docker exec fastapi-tdd python -m isort . --check-only

Running pytest against the docker container locally works. There doesn't appear to be any other logs that I can access that would shed more light onto why this is happening. Any help would be appreciated.

Upvotes: 5

Views: 2029

Answers (1)

Zaffer
Zaffer

Reputation: 1809

Add the DATABASE_URL environment variable in the docker run command.

Refer to this issue: https://github.com/testdrivenio/fastapi-tdd-docker/issues/1

Here is how I fixed it for me:

- name: Run container
    run: |
      docker run \
        -d \
        --name fastapi-tdd \
        -e PORT=8765 \
        -e ENVIRONMENT=dev \
        -e DATABASE_URL=sqlite://sqlite.db \
        -e DATABASE_TEST_URL=sqlite://sqlite.db \
        -p 5003:8765 \
        ${{ env.IMAGE }}:latest

Upvotes: 2

Related Questions