我在AWS EC2实例上创建了一个新的停靠网络
docker network create testnet我有以下的船坞组合:
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在同一网络上运行的第二个容器正试图使用这个端口-组合连接到“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决定重新启动我的实例以来,它就起了作用。之后,我不得不再次重新启动所有容器,但从那时起,我从蒙斯塔容器中得到了一条错误消息,它说:
Unable to connect to MongoDB using URL MongoDB: timed out after 15 seconds这意味着我无法再访问MongoDB容器了。另外,网络中的另一个容器不能再连接到'mongodb‘,所以我不认为它只是'monstache’容器的一个问题。似乎我的码头系统总体上发生了变化。至少当我跑的时候。
docker network inspect testnet我看得出来所有的集装箱都列好了。
到目前为止我所做的:
真的需要帮助,因为我现在被困了两天,试图解决这个问题:
更新: docker-compose.yml用于Elasticsearch (和Kibana)
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网络检查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": {}
}
]发布于 2018-10-09 18:16:27
我已经解决了我的问题。
因为我刚开始的时候
--replSet rs0在重新启动之后,我不得不重新实例化mongodb副本集。使用后
mongo --eval "rs.initiate()"在mongodb容器上,我能够通过“mongodb”容器服务url从其他容器连接。
这也是在重启后发生的原因。似乎我必须重新启动复制集,总是在重新启动发生之后。实际上,我认为这应该保存在mongodb卷目录中,所以重新启动不会影响.但似乎我错了:)
谢谢大家抽出时间。
发布于 2018-10-08 17:39:26
试试这个,秩序重要,基本上是重新开始.(一次复制并全部过去)
docker-compose kill
docker-compose down
docker rm $(docker ps -aq)
docker network rm $(docker network ls)
docker volume rm $(docker volume ls --format {{.Name}})
docker-compose up --force-recreate如果可能的话,你应该避免对副本使用ip地址.
主机名 使用逻辑DNS主机名而不是ip地址,特别是在配置副本集成员或分片群集成员时。使用逻辑DNS主机名可避免由于ip地址更改而导致的配置更改。
更多信息-> 副本集体系结构
除非同时关闭所有节点,否则不需要在重新启动后启动。如果所有容器都运行在一个实例上,我假设这就是所发生的情况。
如果您忽略了其中一个,并且在配置文件中设置了replSet,其他配置文件将自动重新加入。
要获得高可用性,请考虑在Swarm中运行副本集。这里是一个很好的演练设置一个复制集使用群。
https://stackoverflow.com/questions/52704703
复制相似问题