当前位置: 首页 > 知识库问答 >
问题:

当使用单独的docker-compose YAML时,如何从PyMongo访问MongoDB?

伊羽
2023-03-14

我使用单独的YAML可以轻松地停止一个容器,而不停止另一个容器

为了解决这个任务,我使用了Docker-Compose的桥接网络功能。所以我使用了以下两个YAML:

networks:
  wnet:
    driver: bridge

services:
  mongodb:
    image: mongo:4.0.9
    container_name: mongodb
    ports:
      - "27018:27017"
    volumes:
      - mongodb-data:/data/db
    logging: *default-logging
    restart: unless-stopped
    networks:
      - wnet

volumes:
  mongodb-data:
    name: mongodb-data

networks:
  wnet:
    driver: bridge

services:
  logger:
    build:
      context: .
    image:logger:$VERSION
    container_name:logger
    environment:
      - TARGET=$TARGET
    volumes:
      - ./data:/data
    restart: unless-stopped
    networks:
      - wnet
from pymongo import MongoClient

client = MongoClient(port=27018, host='mongodb')  # V1
client = MongoClient(port=27018)  # V2
db = client['dbname']   
db.list_collection_names()
db.get_collection('aaa').insert_one({ 'a':1 })
pymongo.errors.ServerSelectionTimeoutError: mongodb:27018: [Errno -2] Name or service not known

共有1个答案

苏伟志
2023-03-14

最后起作用的是通过其组合名称(mongoDB+wnet=mongodb_wnet)引用网络(在容器mongoDB中定义),并添加external选项。这使得logger容器的YAML文件看起来如下所示:

services:
  logger:
    build:
      context: .
    image: logger:$VERSION
    container_name: logger
    environment:
      - TARGET=$TARGET
    volumes:
      - ./data:/data
    restart: unless-stopped
    networks:
      - mongodb_wnet

networks:
  mongodb_wnet:
    external: true

但是,正如@bellybuster提到的,使用一个docker-compose文件可能是个好主意。我不知道启动、停止和构建属于同一个YAML的单个容器是非常容易的。

在这方面也有足够的文章,例如,如何用docker-compose和/或docker-compose构建单个容器来重新启动单个容器。

 类似资料:
  • 我花了一点时间浏览堆栈溢出和互联网寻找我的问题的答案,但是我发现所有的答案都很难理解,我不确定它们中是否有任何一个与我的问题相关,所以我决定我需要帮助正确的背景。 我正在创建一个程序,将根据输入的特定类型的图形给出一系列解决方案。我真诚地挣扎着在第一个JFrame中从我的JComboBox中获取数据,并在第二个JFrame中显示它。 我有两个类,GraphEquationSolverGUI和定义方

  • 我正在使用Eclipse和Jboss开发EJB2.0项目。下面是代码示例: 09:33:50,273 INFO[org.jboss.as.ejb3.deployment.processors.ejbJNDIBindingsDeploymentUnitProcessor](MSC service thread 1-3)部署单元部署“ejbProject1.jar”中名为AdviceBean的会话be

  • 这表明Docker postgresql(正在运行)在该端口不可用。我尝试将添加到我的中,但没有成功。有什么提示吗?

  • 我有一个 docker 17.05.0-ce,在 ubuntu 服务器 16.04 LTS 上构建 89658be。我有一个Postgres在容器中运行并公开端口5432。 我可以从任何地方连接它,除了psql只是超时的同级容器。作为地址,我使用主机的IP。从客户端Ping有效,而psqlconnect无效。 我知道我可以用组合的Postgres服务创建一个docker-compose,但宁愿不这

  • 我试图使用maven plugin增强来自另一个Jar的实体类,不幸的是,我没有找到正确的方法。 所以我的问题是:为了能够在构建时增强来自外部Jar的类,我需要配置什么?

  • 我试图在不运行的情况下访问一个docker映像,我只想知道它包含什么以进行验证。我不能ssh到容器中,因为它只需要一秒钟就结束了,所以我需要探索图像而不是容器。或者在容器完成之前是否有访问容器的权限?