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.

  • lemmyvore@feddit.nl
    link
    fedilink
    English
    arrow-up
    1
    ·
    8 months ago

    it’s also limiting when I wanna use postgres:// to access a database rather than exposing a port.

    What does this mean? I don’t understand what you’re trying to change, or what you want to achieve.

    It would also help to explain how the services are networked now. Post a sanitized compose file for example.

    • sabreW4K3@lazysoci.alOP
      link
      fedilink
      arrow-up
      1
      ·
      8 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@feddit.nl
        link
        fedilink
        English
        arrow-up
        2
        ·
        8 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.

        • sabreW4K3@lazysoci.alOP
          link
          fedilink
          arrow-up
          1
          ·
          8 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@feddit.nl
            link
            fedilink
            English
            arrow-up
            2
            ·
            8 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).