Networking 当网络模式为“时,无法从本地主机连接容器端口”;桥“;(docker撰写)

Networking 当网络模式为“时,无法从本地主机连接容器端口”;桥“;(docker撰写),networking,docker,localhost,containers,docker-compose,Networking,Docker,Localhost,Containers,Docker Compose,这是我的docker compose.yml yml 版本:“2” 服务: 管理数据库: 建造: 上下文:。 dockerfile:postgres.dockerfile args: -DB\u NAME=admin\u DB -DB_USER=admin -DB_PASSWORD=管理员通行证 网络模式:“默认” 管理员: 建造: 上下文:。 dockerfile:admin.dockerfile args: -UID=$UID -GID=$GID -UNAME=$UNAME 命令:/bin/

这是我的
docker compose.yml

yml
版本:“2”
服务:
管理数据库:
建造:
上下文:。
dockerfile:postgres.dockerfile
args:
-DB\u NAME=admin\u DB
-DB_USER=admin
-DB_PASSWORD=管理员通行证
网络模式:“默认”
管理员:
建造:
上下文:。
dockerfile:admin.dockerfile
args:
-UID=$UID
-GID=$GID
-UNAME=$UNAME
命令:/bin/bash
取决于:
-行政数据库
端口:
- "8000:8000"
链接:
-行政数据库
网络模式:“网桥”

如果使用网络模式:“网桥”,我应该能够在
http://127.0.0.1:8000/
来自localhost,但目前,我只能从localhost在
随机ip:8000
上访问它。 我能够
http://127.0.0.1:8000/
当网络模式为“主机”时访问,但我无法链接容器。 有什么办法可以同时拥有这两种东西吗? -链接容器
-从localhost运行的应用程序

如果由于未知原因,正常链接无法工作,您可以始终创建另一个桥接网络并直接连接到该docker映像。通过这样做,运行映像的IP地址将始终相同

我会这样编辑它:

version: '2'
services:
  admin_db:
    build:
      context: .
      dockerfile: postgres.dockerfile
      args:
        - DB_NAME=admin_db
        - DB_USER=admin
        - DB_PASSWORD=admin_pass
    networks:
      back_net:
        ipv4_address: 11.0.0.2

  admin:
    build:
      context: .
      dockerfile: admin.dockerfile
      args:
        - UID=$UID
        - GID=$GID
        - UNAME=$UNAME
    command: /bin/bash
    depends_on:
      - admin_db
    ports:
      - "8000:8000"
    extra_hosts:
      - "admin_db:11.0.0.2"
    networks:
      back_net:
        ipv4_address: 11.0.0.3

networks:
  back_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
      com.docker.network.bridge.name: "back"
    ipam:
      driver: default
      config:
        - subnet: 11.0.0.0/24
          gateway: 11.0.0.1

希望有帮助

如果由于某种未知原因,正常链接无法工作,您可以始终创建另一个桥接网络,并直接连接到该docker映像。通过这样做,运行映像的IP地址将始终相同

我会这样编辑它:

version: '2'
services:
  admin_db:
    build:
      context: .
      dockerfile: postgres.dockerfile
      args:
        - DB_NAME=admin_db
        - DB_USER=admin
        - DB_PASSWORD=admin_pass
    networks:
      back_net:
        ipv4_address: 11.0.0.2

  admin:
    build:
      context: .
      dockerfile: admin.dockerfile
      args:
        - UID=$UID
        - GID=$GID
        - UNAME=$UNAME
    command: /bin/bash
    depends_on:
      - admin_db
    ports:
      - "8000:8000"
    extra_hosts:
      - "admin_db:11.0.0.2"
    networks:
      back_net:
        ipv4_address: 11.0.0.3

networks:
  back_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
      com.docker.network.bridge.name: "back"
    ipam:
      driver: default
      config:
        - subnet: 11.0.0.0/24
          gateway: 11.0.0.1

希望有帮助

如果您停止所有服务的“网络模式”,会发生什么?默认情况下,应该按照您希望的方式工作。(当然,使用不同的网络模式会让事情变得更复杂。)如果配置中没有“网络模式”,那么我只能在
random ip:8000
上访问我的应用程序。你是在MacOS、Windows上运行还是在使用docker机器?如果你从所有服务中退出“网络模式”,会发生什么?默认情况下,应该按照您希望的方式工作。(当然,使用不同的网络模式会让事情变得更复杂。)如果配置中没有“网络模式”,那么我只能在
随机ip:8000
上访问我的应用程序。你是在MacOS、Windows上运行还是使用docker机器?