I have my main compose file which has a bunch of services in and while it makes it easier to manage, it’s also limiting when I wanna use postgres:// to access a database rather than exposing a port. I’m wondering if I can remedy this by moving it to a new network and(?) stack?

If so, is it just as simple as adding

networks
  - new network name
stacks
  - new stacks name

I’m still curious as to the answer, but it’s not something I need.

  • @sabreW4K3OP
    link
    12 months ago

    I’m an idiot, I apparently already did what I was trying to do

      miniflux:
        container_name: miniflux
        image: miniflux/miniflux:latest
        ports:
          - <redacted>:8080
        depends_on:
          minifluxdb:
            condition: service_healthy
        environment:
          DATABASE_URL: postgres://<redacted>:<redacted>@<redacted>:<redacted>/miniflux?sslmode=disable
          RUN_MIGRATIONS: 1
          CREATE_ADMIN: 1
          ADMIN_USERNAME: <redacted>
          ADMIN_PASSWORD: <redacted>
      minifluxdb:
        container_name: minifluxdb
        image: postgres:15
        environment:
          POSTGRES_USER: <redacted>
          POSTGRES_PASSWORD: <redacted>
          POSTGRES_DB: miniflux
        volumes:
          - /opt/miniflux/postgres:/var/lib/postgresql/data
        ports:
          - <redacted>:5432
        healthcheck:
          test: ["CMD", "pg_isready", "-U", "miniflux"]
          interval: 10s
          start_period: 30s
    
    • lemmyvore
      link
      fedilink
      English
      22 months ago

      I’m guessing you’re exposing the postgres on the host and then referring the host IP from the postgres:// connection string?

      Docker services configured in the same compose already have a bridge network set up among them, they get a random subnet, a gateway, random IPs in that subnet, and also name resolution.

      So all you have to do is stop using ports: on minifluxdb to expose to host, and in the miniflux connect string just use “minifluxdb” (the container name) as the hostname. Docker DNS will resolve that name to whatever IP gets allocated on the private subnet.

      If you want you can define a different hostname from the container name with the “hostname:” directive.

      Have a look at docker network list too.

      • @sabreW4K3OP
        link
        12 months ago

        First off, apologies for the delay. But my brain just didn’t wanna think about compose yesterday.

        Okay, so the reason I’ve ended up with postgres://username:password@ipaddress:port was because I’m running a bunch of different postgres databases within the compose file and once I removed the port, compose kept trying to look at the wrong database. What I was essentially trying to do was get it to look for the right database by creating its own stack and network and then not having to open the port to the outside.

        Does that make sense? I could totally be overthinking things.

        • lemmyvore
          link
          fedilink
          English
          22 months ago

          Try using the postgres hostname instead of “ipaddress”, it should work. Postgres doesn’t have to be exposed on host for this to work, and all compose files will automatically create a bridge network for all services defined in it so you don’t technically need to make an explicit network (unless you really need to define IPs or MACs or some other parameters).

          • @sabreW4K3OP
            link
            12 months ago

            I’ll give it a go. Thank you.