Php 如何访问主机&x27;docker容器内的s mongo db

Php 如何访问主机&x27;docker容器内的s mongo db,php,laravel,mongodb,docker,Php,Laravel,Mongodb,Docker,我对docker有点陌生。我正在开发一个laravel应用程序,我的应用程序容器正在运行。 在应用程序容器中,我想连接到本地托管的mongo db服务器,它通常是localhost:27017 这是我的docker compose.yml文件 version: '3' services: #PHP Service app: build: context: . dockerfile: Dockerfile image: digitalocean.c

我对docker有点陌生。我正在开发一个laravel应用程序,我的应用程序容器正在运行。 在应用程序容器中,我想连接到本地托管的mongo db服务器,它通常是
localhost:27017

这是我的docker compose.yml文件

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: digitalocean.com/php
    container_name: bns_app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./:/var/www
      - ./docker_files/php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - app-network

  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: bns_web
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./docker_files/nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  #MySQL Service
  db:
    image: mysql:5.7.22
    container_name: bns_db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: 12345
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql/
      - ./docker_files/mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

  #REDIS Service
  redis:
      build:
        context: ./docker_files/redis
        dockerfile: Dockerfile
      container_name: bns_redis
      volumes:
        - ./docker_files/redis:/data
      ports:
        - "6379:6379"
      networks:
        - app-network

  # Laravel Echo Server
  laravel-echo-server:
        build:
          context: ./docker_files/laravel-echo-server
          dockerfile: Dockerfile
        container_name: bns_echo_server

        volumes:
          - ./laravel-echo-server.json:/var/www/laravel-echo-server.json:ro
        ports:
          - "6001:6001"
        links:
          - redis
        networks:
          - app-network

  # PHP-WORKER
  php-worker:
    build:
      context: ./docker_files/php-worker
      dockerfile: Dockerfile
    container_name: bns_worker
    volumes:
      - ./php-worker/supervisord.d:/etc/supervisord.d
    depends_on:
      - app
    networks:
      - app-network


#Docker Networks
networks:
  app-network:
    driver: bridge
#Volumes
volumes:
  dbdata:
    driver: local
因此,当我运行artisan命令(如
docker compose exec app php artisan migrate:fresh--seed
mysql表)时,在我的应用程序容器内成功迁移了mysql表,但mongo db(不在任何容器中,但仅在主机中)文档未迁移/种子,我得到错误:

No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling ismaster on '172.18.0.3:27017']

  at /var/www/vendor/mongodb/mongodb/src/functions.php:431
    427|         // TODO: PHPLIB-476: Read transaction read preference once PHPC-1439 is implemented
    428|         $readPreference = new ReadPreference(ReadPreference::RP_PRIMARY);
    429|     }
    430| 
  > 431|     return $manager->selectServer($readPreference);
    432| }
    433| 

  Exception trace:

  1   MongoDB\Driver\Manager::selectServer(Object(MongoDB\Driver\ReadPreference))
      /var/www/vendor/mongodb/mongodb/src/functions.php:431

  2   MongoDB\select_server(Object(MongoDB\Driver\Manager), [])
      /var/www/vendor/mongodb/mongodb/src/Database.php:419

  Please use the argument -v to see more details.
这是我的环境文件:

MONGO_DATABASE=exchange
MONGO_HOST=172.18.0.3 # << This is the IP address of my app container  <<
MONGO_PORT=27017
MONGO_USERNAME=
MONGO_PASSWORD=
MONGO_数据库=exchange

MONGO_HOST=172.18.0.3 35;我不知道如何使用静态ip作为172.17.0.1

现在,我的环境文件是:

MONGO_DATABASE=exchange
MONGO_HOST=172.17.0.1
MONGO_PORT=27017
MONGO_USERNAME=
MONGO_PASSWORD=
从中获得参考

它必须有很好的文件记录