管理员通过 Docker - 我可以指定 HTTP 端口吗?

Adminer via Docker - can I dictate HTTP port?

我对 Docker 和端口有点费劲,但这是我的情况。我有一个 Docker 组合文件,它启动了一个 Postgres 数据库和管理员,即管理 GUI。这是我的(截断的)配置:

  # database
  db:
    image: postgres:14.2
    volumes:
      - .psqlrc:/root/.psqlrc:ro
      - dbdat:/var/lib/postgresql/data
      - ./log:/root/log:cached
      - ./latest.dump:/latest.dump
    environment:
      POSTGRES_DB: hlp-api-dev
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      DB_PORT: 5432
    ports:
      - 5432
    healthcheck:
      test: pg_isready -U postgres -h 127.0.0.1
      interval: 5s

  # database admin
  dbAdmin:
    image: adminer
    ports:
      - 8080
    depends_on:
      - db

一切正常 - 但对管理员的 HTTP 访问似乎是 Docker 选择的随机端口,例如

http://localhost:57014

...我只能通过单击 Docker 桌面中其容器旁边的浏览器按钮才能找到它。 我如何指示这个端口,为什么它不能在

访问
http://localhost:8080

...列出的端口是什么?

如果我尝试指定另一个端口,即

ports:
  - 8080
  - 5000 # my choice

...然后它根本不会在任何端口上旋转。即使我在 DD 中单击浏览器按钮,我也会在浏览器中看到“连接重置”。

是的,你可以。如果您将两个端口号指定为 xxxx:yyyy,第一个将是主机端口,第二个将是应用正在侦听的内部容器端口。管理员监听 8080,以便固定。但您可以自由选择主机端口。所以要在 http://localhost:5000/ 上访问它,你需要做

  # database admin
  dbAdmin:
    image: adminer
    ports:
      - 5000:8080
    depends_on:
      - db

如果需要,您可以在 Postgres 容器上执行相同的操作。