Or *_*ger 8 docker docker-swarm docker-networking
我正在尝试研究如何在Docker中正确使用swarm模式.首先,我尝试在我的2台工作人员和经理机器上运行容器,而没有指定自定义网络(所以我使用默认的入口覆盖网络).但是,如果我使用入口网络,由于某种原因我无法解决tasks.myservice.
所以我尝试像这样配置自定义网络:
docker network create -d overlay elasticnet
Run Code Online (Sandbox Code Playgroud)
所以现在,当我bash进入其中一个容器时,我可以成功解决,tasks.myservice但是我无法再访问我在--publish外部创建的服务中定义的端口(我可以在使用入口网络时).
有没有办法:
使用入口网络并能够解析tasks.myservice或指向我所有服务容器的任何其他DNS记录?
或者,使用自定义网络,但--publish正确端口,以便我可以从外部访问它们?
编辑
这就是我创建服务的方式,
没有自定义网络:
docker service create --replicas 3 --label elasticsearch --endpoint-mode vip --name elastic -e ES_HOSTS="tasks.elastic" --publish 9200:9200 --mount type=bind,source=/tmp/es,destination=/usr/share/elasticsearch/config --update-delay 10s es:latest
Run Code Online (Sandbox Code Playgroud)
使用自定义网络:
docker service create --replicas 3 --network elasticnet --label elasticsearch --endpoint-mode vip --name elastic -e ES_HOSTS="tasks.elastic" --publish 9200:9200 --mount type=bind,source=/tmp/es,destination=/usr/share/elasticsearch/config --update-delay 10s es:latest
Run Code Online (Sandbox Code Playgroud)
我们在这里缺少的是您的服务定义,或者您在定义容器时是否使用了良好的老式 docker run 。
如果您使用了 docker 服务功能(在 docker 1.12 中提供),您仍然可以通过服务公开您的端口
docker create --name nodejs1 --network anti-spam -p 1230:123 --replicas 1 image:version
Run Code Online (Sandbox Code Playgroud)
您的服务将在反垃圾邮件网络上创建,如果您创建另一个服务nodejs2,它们将能够使用服务名称(如主机名)相互访问。
发布仍然可以在 swarm 上进行,但每个主机都会侦听端口 1230,然后将其网状路由到其中一个容器。
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |