【发布时间】:2018-10-10 03:55:56
【问题描述】:
我通过
在我的 AWS EC2 实例上创建了一个新的 docker 网络docker network create testnet
我有以下 docker-compose:
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
在同一网络上运行的第二个容器正在尝试使用此 docker-compose 连接到“mongodb”:
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 决定重新启动我的实例以来,它一直有效。之后,我不得不再次重新启动所有容器,但从那时起我从 monstache 容器中收到一条错误消息:
Unable to connect to MongoDB using URL MongoDB: timed out after 15 seconds
这意味着我无法再访问 MongoDB 容器了。此外,网络中的另一个容器无法再连接到“mongodb”,所以我认为这不仅仅是“monstache”容器的问题。我的 docker 系统似乎发生了一些变化。 至少在我跑步的时候。
docker network inspect testnet
我可以看到所有的容器都列出来了。
到目前为止我做了什么:
- 重启 docker 服务(多次)
- 手动删除并创建了 docker 网络(也使用了新名称)
- docker 系统修剪
真的需要帮助,因为我现在被困了 2 天试图解决这个问题:(
更新:用于 Elasticsearch(和 Kibana)的 docker-compose.yml
version: "2"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.1
container_name: elasticsearch
volumes:
- elasticsearch:/usr/share/elasticsearch/data
ports:
- 9200:9200
kibana:
image: docker.elastic.co/kibana/kibana:6.4.1
container_name: kibana
depends_on:
- elasticsearch
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ports:
- 5601:5601
volumes:
elasticsearch:
driver: local
networks:
default:
external:
name: testnet
更新: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": {}
}
]
【问题讨论】:
-
你确定 mongodb 容器已经在运行了吗?
-
是的,我可以看到所有容器都在使用 docker ps -a 运行
-
所以您已经尝试过先运行 mongo 容器,然后手动运行 monstache 容器。在这些情况下,它们工作正常吗?
-
不幸的是,即使手动启动每个容器,它也无法正常工作。实际上还有一个弹性搜索容器在同一个网络上运行。 Monstache 会将 mongodb 数据同步到 elasticsearch 索引,因此它必须知道 'mongodb' 和 'elasticsearch' 作为主机。但是“mongodb”不知何故无法连接。无论如何,设置是:mongodb + elasticsearch 作为自己的容器运行。之后我开始 monstache 容器
-
你能提供 Docker compose 来进行弹性搜索吗?如果我正确理解你的问题。所有容器都正常启动,但没有一个可以通过服务发现访问。我说的对吗?
标签: docker amazon-ec2 docker-compose docker-networking