Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ConnectionTimeoutException:将数据插入mongodb数据库时未找到合适的服务器_Mongodb_Docker_Php 7 - Fatal编程技术网

ConnectionTimeoutException:将数据插入mongodb数据库时未找到合适的服务器

ConnectionTimeoutException:将数据插入mongodb数据库时未找到合适的服务器,mongodb,docker,php-7,Mongodb,Docker,Php 7,我是Docker和Mongodb的新手。 我的docker-compose.yml文件中有以下内容 version: '3.3' services: web: build: context: ./ dockerfile: Dockerfile container_name: php73 volumes: - ./src:/var/www/html/ ports: - 8000:

我是Docker和Mongodb的新手。 我的docker-compose.yml文件中有以下内容

version: '3.3'
services:
    web:
      build:
        context: ./
        dockerfile: Dockerfile
      container_name: php73
      volumes:
        - ./src:/var/www/html/
      ports:
        - 8000:80
      depends_on:
        - db
      networks:
        - my-network
    db:
      image: mongo:latest
      container_name: mymongo
      restart: always
      ports:
        - '27017-27019:27017-27019'
      networks:
        - my-network
networks:
  my-network:
以下文件在php容器中运行。它只是创建一个数据库并将一些Collectin插入数据库

<?php
require 'vendor/autoload.php';

$myClient = new MongoDB\Client('mongodb://127.0.0.1:27017');

$mydb = $myClient->my_db;
$mycollection = $mydb->my_collection;

$insertData = $mycollection->insertOne([
                'doc1' => 'abc', 
                'doc2' => 'def'
                ]);
?>
我不明白为什么它显示ConnectionTimeoutException。
有人能给点提示吗?

将您的连接字符串更新为

<?php
require 'vendor/autoload.php';

$myClient = new MongoDB\Client('mongodb://db:27017');
// or new MongoDB\Client('mongodb://db:27017');
$mydb = $myClient->my_db;
$mycollection = $mydb->my_collection;

$insertData = $mycollection->insertOne([
                'firstname' => 'abc', 
                'lastname' => 'def'
                ]);
?>

docker compose创建网络默认情况下,您可以使用容器名称访问其他容器,其中
127.0.0.1
指的是php容器的本地主机,而不是DB容器

<?php
require 'vendor/autoload.php';

$myClient = new MongoDB\Client('mongodb://db:27017');
// or new MongoDB\Client('mongodb://db:27017');
$mydb = $myClient->my_db;
$mycollection = $mydb->my_collection;

$insertData = $mycollection->insertOne([
                'firstname' => 'abc', 
                'lastname' => 'def'
                ]);
?>