Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
无法连接到aws实例上的mongodb docker容器_Docker_Amazon Ec2_Docker Compose_Docker Networking - Fatal编程技术网

无法连接到aws实例上的mongodb docker容器

无法连接到aws实例上的mongodb docker容器,docker,amazon-ec2,docker-compose,docker-networking,Docker,Amazon Ec2,Docker Compose,Docker Networking,我在AWS EC2实例上创建了一个新的docker网络 docker network create testnet 我有以下docker组件: version: '2' services: mongodb: image: mongo:3 container_name: mongodb environment: - MONGO_DATA_DIR=/data/db - MONGO_LOG_DIR=/dev/null volumes:

我在AWS EC2实例上创建了一个新的docker网络

docker network create testnet
我有以下docker组件:

version: '2'

services:
  mongodb:
    image: mongo:3
    container_name: mongodb
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - mongodb_data_db:/data/db
    ports:
      - 27017:27017
    command: mongod --smallfiles --logpath=/dev/null --replSet rs0 # --quiet

volumes:
  mongodb_data_db:

networks:
  default:
    external:
      name: testnet
version: "2"
services:
  monstache:
    image: rwynn/monstache
    container_name: monstache
    command: -mongo-url=mongodb -elasticsearch-url=http://elasticsearch:9200 -direct-read-namespace=db.heartbeat -direct-read-split-max=2

networks:
  default:
    external:
      name: testnet
在同一网络上运行的第二个容器正在尝试使用此docker compose连接到“mongodb”:

version: '2'

services:
  mongodb:
    image: mongo:3
    container_name: mongodb
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - mongodb_data_db:/data/db
    ports:
      - 27017:27017
    command: mongod --smallfiles --logpath=/dev/null --replSet rs0 # --quiet

volumes:
  mongodb_data_db:

networks:
  default:
    external:
      name: testnet
version: "2"
services:
  monstache:
    image: rwynn/monstache
    container_name: monstache
    command: -mongo-url=mongodb -elasticsearch-url=http://elasticsearch:9200 -direct-read-namespace=db.heartbeat -direct-read-split-max=2

networks:
  default:
    external:
      name: testnet
自从上次AWS决定重新启动我的实例后,它就开始工作了。之后,我不得不重新启动所有容器,但从那时起,我从Monstach容器收到一条错误消息,上面说:

Unable to connect to MongoDB using URL MongoDB: timed out after 15 seconds
这意味着我无法再访问MongoDB容器了。此外,网络中的另一个容器无法再连接到“mongodb”,因此我认为这不仅仅是“Monstach”容器的问题。我的docker系统似乎已经发生了一些变化。 至少在我跑步的时候

docker network inspect testnet
我可以看到所有的集装箱都列了出来

到目前为止我所做的:

  • 重新启动docker服务(多次)
  • 手动删除并创建docker网络(同时使用新名称)
  • docker系统剪枝
真的需要帮助,因为我现在被困了两天,试图解决这个问题:(


更新:用于Elasticsearch(和Kibana)的docker-compose.yml


更新:docker network inspect testnet

:~$ docker network inspect testnet
[
  {
    "Name": "testnet",
    "Id": "448018003d92c8802dd701931e21da018618abce360a147808a5c6b4b51f4b6d",
    "Created": "2018-10-08T12:40:10.163231318Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
      "Driver": "default",
      "Options": {},
      "Config": [
        {
          "Subnet": "172.18.0.0/16",
          "Gateway": "172.18.0.1"
        }
      ]
    },
    "Internal": false,
    "Attachable": false,
    "Containers": {
      "34df14ddf4ef004115b6e66b35177356a7c0c5e5d0d94d2c05406aa61cd1d744": {
        "Name": "kibana",
        "EndpointID": "bb38deafbd1929d268ba55c8fb28064d9b0afe7bbfb95289a6893ca62f91ff8b",
        "MacAddress": "02:42:ac:12:00:03",
        "IPv4Address": "172.18.0.3/16",
        "IPv6Address": ""
      },
      "95034d04c4f6c07527f725436a84b20a1514d8aaf70d4e19c54344eb07c7632f": {
        "Name": "elasticsearch",
        "EndpointID": "269e42333b20dd01152f58329c87060059471a8ea68e3cd97cb45c502b102879",
        "MacAddress": "02:42:ac:12:00:02",
        "IPv4Address": "172.18.0.2/16",
        "IPv6Address": ""
      },
      "c3153881f2a8925bb74718afa9b33c5e9cfcc10f58b2fa7a5157e45b83bea343": {
        "Name": "mongodb",
        "EndpointID": "44c6ac5755897c056d7285eba83a0934e1871b6c2ca671cbbe846fc55e23ff3e",
        "MacAddress": "02:42:ac:12:00:04",
        "IPv4Address": "172.18.0.4/16",
        "IPv6Address": ""
      }
    },
    "Options": {},
    "Labels": {}
  }
]

试试这个,订单很重要,基本上是从新开始的…(一次复制并通过)

如果可能,您应该避免对副本使用ip地址

主机名

使用逻辑DNS主机名而不是ip地址, 特别是在配置副本集成员或分片群集时 使用逻辑DNS主机名可以避免配置更改 由于ip地址的变化

更多信息-->

除非所有节点同时关闭,否则重新启动后不需要启动。我假设如果所有容器都在一个实例上运行,就会发生这种情况

如果您保留一个,并且在配置文件中设置了
replSet
,其他人将自动重新加入


对于高可用性,考虑在<代码> Sux<代码>中运行副本集。使用Sead设置副本集很好。

< P>我已经解决了我的问题。

因为我是从mongod开始的

--replSet rs0
在重启之后,我不得不重新实例化mongodb副本集

mongo --eval "rs.initiate()"
在mongodb容器上,我可以通过“mongodb”容器服务url从其他容器连接

这也是重新启动后发生的原因。似乎每次重新启动后我都必须重新启动replicat集。实际上我认为这应该保存在mongodb卷目录中,所以重新启动不会影响这一点……但似乎我错了:)


谢谢大家抽出时间。

您确定mongodb容器已经运行了吗?是的,我所能看到的是所有容器都在使用docker ps运行-aSo您已经尝试先运行mongo容器,然后手动运行Monstach容器。在这些情况下,它们工作正常,对吗?不幸的是,即使手动启动每个容器,它也不工作。实际上,在同一个网络上还运行着一个elasticsearch容器。Monstach将把mongodb数据同步到elasticsearch索引,因此它必须知道“mongodb”和“elasticsearch”作为主机。但是“mongodb”在某种程度上是不可连接的。无论如何,设置是:mongodb+elasticsearch作为自己的容器运行。然后我开始Monstach Container你能为弹性搜索提供Docker compose吗?如果我正确理解你的问题。所有容器都已正确启动,但没有一个容器可通过服务发现访问。我说得对吗?不幸的是,这对我不起作用。仍然无法访问“mongodb”。Docker也不接受--no cache和--format{.Id}参数。更新的答案应该是
name
not
Id
--no cache
只适用于builded添加更多信息来回答