当前位置: 首页 > 面试题库 >

mongod --bind_ip使用docker-compose版本2

锺离珂
2023-03-14
问题内容

我正在尝试使用来连接在docker上运行的两个mongodb容器docker- compose。一个容器使用将种子中的数据提供给另一个容器mongoimport

但是,运行时出现以下错误 mongoimport

Failed: error connecting to db server: no reachable servers

实际上,我可以mongodb从到达容器,mongo-seed因为我将追加了ping -c 3 mongodbCMD并且容器可以成功解析该主机名。

在我正在使用的文件下面:

docker-compose.yml

version: '2'

services:
  mongodb:
    image: mongo:3.2
    ports:
      - "27017:27017"

  mongo-seed:
    build: ./mongo-seed

mongo-seed / Dockerfile

FROM mongo:3.2

COPY init.json /init.json
CMD ping -c 3 mongodb && mongoimport --host mongodb --db test --collection users \
   --type json --file /init.json --jsonArray

mongo-seed / init.json

[
  {
    "name": "Joe Smith",
    "email": "jsmith@gmail.com",
    "age": 40,
    "admin": false
  },
  {
    "name": "Jen Ford",
    "email": "jford@gmail.com",
    "age": 45,
    "admin": true
  }
]

这是输出docker-compose up

mongo-seed_1  | PING mongodb (172.18.0.2): 48 data bytes
mongo-seed_1  | 56 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.116 ms
mongo-seed_1  | 56 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.141 ms
mongo-seed_1  | 56 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.114 ms
mongo-seed_1  | --- mongodb ping statistics ---
mongo-seed_1  | 3 packets transmitted, 3 packets received, 0% packet loss
mongo-seed_1  | round-trip min/avg/max/stddev = 0.114/0.124/0.141/0.000 ms
mongo-seed_1  | 2016-08-09T20:34:15.728+0000    [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1  | 2016-08-09T20:34:17.992+0000    [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1  | 2016-08-09T20:34:17.992+0000    Failed: error connecting to db server: no reachable servers
mongo-seed_1  | 2016-08-09T20:34:17.992+0000    imported 0 documents
mongo_mongo-seed_1 exited with code 1

任何的想法?我想念什么?


问题答案:

我终于可以设法连接两个容器。我的发现是出于文档目的。

要点

  • docker-compose版本2创建bridge网络并向其中添加所有容器。
  • mongod不知道此网络,因此未绑定到该IP。默认情况下,仅绑定到127.0.0.1
  • mongoimport 即使应该将其转换为容器ip,也无法使用容器名称建立连接。

  • 通过显式定义为mongodb分配静态IP network
  • 初始化mongo容器,其--bind_ip标志指向该静态ip
  • 使用IP地址代替主机名 mongoimport

docker-compose.yml

version: '2'

services:
  mongodb:
    image: mongo:3.2
    ports:
      - "27017:27017"
    networks:
      mongo_net:
        ipv4_address: 172.16.0.1
    command: mongod --bind_ip 127.0.0.1,172.16.0.1

  mongo-seed:
    build: ./mongo-seed
    networks:
      mongo_net:
    depends_on:
      - mongodb

networks:
  mongo_net:
    driver: bridge
    ipam:
      config:
      - subnet: 172.16.0.0/24
        gateway: 172.16.0.254

mongo-seed / Dockerfile

FROM mongo:3.2

COPY init.json /init.json
CMD mongoimport --host 172.16.0.1 --db test --collection users \
   --type json --file /init.json --jsonArray


 类似资料:
  • 只有在使用“旧的”版本1格式时,我才会在容器的/etc/hosts中看到链接。 我有以下基本版本2 docker-compose.yml文件。 当我运行以下命令时: null

  • 经过前文对Docker Compose的讲解,我们以Spring Cloud章节的几个示例项目为例,讲解如何使用Docker Compose部署项目: 准备工作 使用到的示例项目有: 项目名称 作用 microservice-api-gateway API Gateway microservice-consumer-movie-ribbon-with-hystrix 服务消费者 microserv

  • debian12 如何使用 apt 一键安装 docker-compose V2 版本? 仓库里面自带的,还是 python 写的 v1 版本,我要安装 golang 写的 v2 版本

  • 我在一个docker compose文件中运行两个不同的服务。我通过引用容器的服务名称来谈论每个服务。 现在我希望我的容器A也能访问localhost。为此,我添加了network_mode=host的配置,但这会创建一个错误,说明容器A无法与容器B通信。 对于每个撰写文件docker-composs创建一个网络,所以在这种情况下,我应该手动将容器分配到一个专用网络吗?或者是否有任何变通方法来访问

  • 我目前正在使用https://medium.com/@sunnykay/docker-开发-工作流-节点-快递-蒙戈-4bb3b1f7eb1e尝试这个教程 第一部分在构建< code>docker-compose.yml的地方运行良好,在本地构建完全运行良好,因此我尝试标记它,并将其推入我的< code>dockerhub以了解和尝试更多内容。 这最初是文件中的内容,然后是教程 当我使用< cod

  • 我一直在使用docker撰写文件来运行在生产中部署到kubernetes的微服务架构的开发环境,因此我使用将k8s提供的域名映射到撰写服务名称。例如 使用时一切正常。但是当使用新的(注意没有连字符)时,容器无法相互粉碎。Kafka连接失败。HTTP请求失败。 docker cli版本的compose与旧的命令之间是否有任何更改。没有hypen,我看不到docker compose的版本,但有了它,