Help
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Copilot Lvl 2
Message 1 of 3

Can't connect to Postgres service

I have written a github action that runs tests in a docker container. Sometimes users of that action will want to connect to a database for the tests, I would expect they could just use a postgres service to do so,  but currently I cannot get that to work. 

 

 

name: On Prs
on: [pull_request]

jobs:
  run_tests:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:11-alpine
        env:
          POSTGRES_USER: monster
          POSTGRES_PASSWORD: monster
        ports:
          - "54321:5432"
        # needed because the postgres container does not provide a healthcheck
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 10

    steps:
      - uses: actions/checkout@v2
      - name: "run dem tests"
        uses: Adzz/elixir_run_tests_action@v2.0.0

 

The app is correctly configured to listen port 54321 and the db user and password are configured correctly to both be monster. Is there something obvious I am missing??

 

The error is:

 

```
(DBConnection.ConnectionError) tcp connect (postgres:54321): connection refused - :econnrefused
```

 

Thanks!

2 Replies
Highlighted
GitHub Partner
Message 2 of 3

Re: Can't connect to Postgres service

Hi @Adzz ,

 

Thank you for being here!

From your code 'ports: - "54321:5432"', you are mapping TCP port 5432 in the container to port 54321 on the Docker host. I don't have your exact code, so if your app is listening port on host runner, it should be '54321' port.

But since you're using a github container action to communicate with postgres service, as doc mentioned:

your step uses container actions, you don't need to map ports to access the service or action. Docker automatically exposes all ports between containers on the same Docker user-defined bridge network. You can directly reference the service container by its hostname. The hostname is automatically mapped to the label name you configure for the service in the workflow.

 

You should not need to listen to the port but reference its hostname/label name directly.

 

Thanks.

 

Highlighted
Copilot Lvl 2
Message 3 of 3

Re: Can't connect to Postgres service

Thanks for the response, that was a typo my App was configured to listen to 54321, so it should have been working.

 

If i drop the port mapping how will it know what port my app is configured to listen to? Indeed if i do that it (predictably) doesn't connect to the database.