title: Docker Compose with PostgreSQL and Prometheus PostgreSQL Exporter refusing to connect?
body: <p>I'm trying to solve this question regarding the PostgreSQL exporter to Prometheus (<a href="https://github.com/wrouesnel/postgres_exporter" rel="nofollow noreferrer">https://github.com/wrouesnel/postgres_exporter</a>), <a href="https://stackoverflow.com/questions/58225609/prometheus-postgresql-server-exporter-example-not-working-on-macos">Prometheus PostgreSQL server exporter example not working on MacOS?</a>, running <code>postgres</code> and <code>postgres_exporter</code> containers connected to a user-defined bridge network rather than the host network, which seems not to work on Docker Desktop for Mac. I've created the following <code>docker-compose.yml</code>:</p>
  
  <pre><code>version: "3"
  services:
    db:
      image: postgres
      environment:
        POSTGRES_PASSWORD: mypassword
      networks:
        - mynetwork
  
    exporter:
      image: wrouesnel/postgres_exporter
      environment:
        DATA_SOURCE_NAME: "postgresql://postgres:mypassword@db:5432/postgres?sslmode=disable"
      ports:
        - "9187:9187"
      networks:
        - mynetwork
  
  networks:
    mynetwork:
  </code></pre>
  
  <p>I am having two issues with this, however. Firstly, the logs from the <code>exporter</code> service show an error with this message:</p>
  
  <blockquote>
    <p>"Error opening connection to database (postgresql://postgres:PASSWORD_REMOVED@db:5432/postgres?sslmode=disable): dial tcp 172.18.0.2:5432: connect: connection refused"</p>
  </blockquote>
  
  <p>Here is the full output:</p>
  
  <pre><code>&gt; docker-compose up
  Creating network "postgres-performance-testing_mynetwork" with the default driver
  Creating postgres-performance-testing_db_1       ... done
  Creating postgres-performance-testing_exporter_1 ... done
  Attaching to postgres-performance-testing_db_1, postgres-performance-testing_exporter_1
  exporter_1  | time="2019-10-03T20:16:56Z" level=info msg="Established new database connection to \"db:5432\"." source="postgres_exporter.go:778"
  exporter_1  | time="2019-10-03T20:16:56Z" level=error msg="Error opening connection to database (postgresql://postgres:PASSWORD_REMOVED@db:5432/postgres?sslmode=disable): dial tcp 172.18.0.2:5432: connect: connection refused" source="postgres_exporter.go:1348"
  exporter_1  | time="2019-10-03T20:16:56Z" level=info msg="Starting Server: :9187" source="postgres_exporter.go:1459"
  db_1        | The files belonging to this database system will be owned by user "postgres".
  db_1        | This user must also own the server process.
  db_1        | 
  db_1        | The database cluster will be initialized with locale "en_US.utf8".
  db_1        | The default database encoding has accordingly been set to "UTF8".
  db_1        | The default text search configuration will be set to "english".
  db_1        | 
  db_1        | Data page checksums are disabled.
  db_1        | 
  db_1        | fixing permissions on existing directory /var/lib/postgresql/data ... ok
  db_1        | creating subdirectories ... ok
  db_1        | selecting default max_connections ... 100
  db_1        | selecting default shared_buffers ... 128MB
  db_1        | selecting default timezone ... Etc/UTC
  db_1        | selecting dynamic shared memory implementation ... posix
  db_1        | creating configuration files ... ok
  db_1        | running bootstrap script ... ok
  db_1        | performing post-bootstrap initialization ... ok
  db_1        | syncing data to disk ... ok
  db_1        | 
  db_1        | Success. You can now start the database server using:
  db_1        | 
  db_1        |     pg_ctl -D /var/lib/postgresql/data -l logfile start
  db_1        | 
  db_1        | 
  db_1        | WARNING: enabling "trust" authentication for local connections
  db_1        | You can change this by editing pg_hba.conf or using the option -A, or
  db_1        | --auth-local and --auth-host, the next time you run initdb.
  db_1        | waiting for server to start....2019-10-03 20:16:57.084 UTC [42] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
  db_1        | 2019-10-03 20:16:57.095 UTC [43] LOG:  database system was shut down at 2019-10-03 20:16:56 UTC
  db_1        | 2019-10-03 20:16:57.101 UTC [42] LOG:  database system is ready to accept connections
  db_1        |  done
  db_1        | server started
  db_1        | 
  db_1        | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
  db_1        | 
  db_1        | waiting for server to shut down...2019-10-03 20:16:57.180 UTC [42] LOG:  received fast shutdown request
  db_1        | .2019-10-03 20:16:57.182 UTC [42] LOG:  aborting any active transactions
  db_1        | 2019-10-03 20:16:57.186 UTC [42] LOG:  background worker "logical replication launcher" (PID 49) exited with exit code 1
  db_1        | 2019-10-03 20:16:57.186 UTC [44] LOG:  shutting down
  db_1        | 2019-10-03 20:16:57.197 UTC [42] LOG:  database system is shut down
  db_1        |  done
  db_1        | server stopped
  db_1        | 
  db_1        | PostgreSQL init process complete; ready for start up.
  db_1        | 
  db_1        | 2019-10-03 20:16:57.297 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
  db_1        | 2019-10-03 20:16:57.297 UTC [1] LOG:  listening on IPv6 address "::", port 5432
  db_1        | 2019-10-03 20:16:57.299 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
  db_1        | 2019-10-03 20:16:57.310 UTC [51] LOG:  database system was shut down at 2019-10-03 20:16:57 UTC
  db_1        | 2019-10-03 20:16:57.314 UTC [1] LOG:  database system is ready to accept connections
  </code></pre>
  
  <p>Is this because of the Prometheus exporter trying to connect to the database before it is ready to accept connections? (This would seem to be the case from the sequence of the logging).</p>
  
  <p>Another problem is that if I browse to <code>localhost:9187</code>, the result is that I download a file containing HTML, rather than actually seeing a link to <code>/metrics</code> that I can follow:</p>
  
  <p><a href="https://i.stack.imgur.com/Y5LQE.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Y5LQE.png" alt="enter image description here"></a></p>
  
  <p>Any idea how I can resolve these issues?</p>