有没有办法可以使用名称而不是IP地址访问我的docker容器?
我听说过管道工程,我已经看到了docker的一些dns和主机名类型选项,但我仍然无法将所有内容拼凑在一起.
感谢您的时间.
我不确定这是否有用,但这是我到目前为止所做的:
我已经将DNS别名条目添加到我的专用网络DNS服务器,它与docker-machine使用的机器名称相匹配.但是,当计算机启动并连接到网络时,它始终会选择不同的IP地址.
我只是迷失在哪里解决这个问题:
我可能正在寻找类似这个问题的东西:
如何让docker使用我的网络路由器轻松地将dhcp ip分配给容器而不是管道?
任何大方向都会很棒......再次感谢!
我有Docker版本1.10与嵌入式DNS服务.
我在docker-compose文件中创建了两个服务容器.它们可以通过主机名和IP相互访问,但是当我想从主机到达其中一个时,它不起作用,它只适用于IP但不适用于主机名.
那么,是否可以通过Docker 1.10中的主机名从主机访问docker容器,好吗?
更新:
泊坞窗,compose.yml
version: '2'
services:
service_a:
image: nginx
container_name: docker_a
ports:
- 8080:80
service_b:
image: nginx
container_name: docker_b
ports:
- 8081:80
Run Code Online (Sandbox Code Playgroud)
然后我按命令启动它: docker-compose up --force-recreate
当我跑:
docker exec -i -t docker_a ping -c4 docker_b - 有用docker exec -i -t docker_b ping -c4 docker_a - 有用ping 172.19.0.2- 它的工作原理(172.19.0.2是docker_b的)ping docker_a- 失败了结果docker network inspect test_default是
[
{
"Name": "test_default",
"Id": "f6436ef4a2cd4c09ffdee82b0d0b47f96dd5aee3e1bde068376dd26f81e79712",
"Scope": "local",
"Driver": "bridge",
"IPAM": { …Run Code Online (Sandbox Code Playgroud) 我按照这个 SO 答案创建了一个本地 MongoDB 副本集。
docker-compose 文件:
services:
mongo1:
container_name: mongo1
image: mongo:4.2
ports:
- 27017:27017
restart: always
command: ["--bind_ip_all", "--replSet", "rs" ]
mongo2:
container_name: mongo2
image: mongo:4.2
ports:
- 27018:27017
restart: always
command: ["--bind_ip_all", "--replSet", "rs" ]
mongo3:
container_name: mongo3
image: mongo:4.2
ports:
- 27019:27017
restart: always
command: ["--bind_ip_all", "--replSet", "rs" ]
replica_set:
image: mongo:4.2
container_name: replica_set
depends_on:
- mongo1
- mongo2
- mongo3
volume:
- ./initiate_replica_set.sh:/initiate_replica_set.sh
entrypoint:
- /initiate_replica_set.sh
Run Code Online (Sandbox Code Playgroud)
initiate_replica_set.sh 文件:
#!/bin/bash
echo "Starting replica set initialize" …Run Code Online (Sandbox Code Playgroud) 我正在使用 docker-compose 和 docker。一切都很好。但是从主机访问服务的唯一方法是通过http://localhost:port。我希望能够使用容器名称进行访问,例如:http://elastic:9020。
It works well inside the docker. if one container needs to access another i can use the http://elastic:9020 but not from the Host. Of Course that i am exposing the ports and using port mapping and it works using localhost as i said. Docker
UPDATE: I was looking for a native solution without the needs of installing DNS Server or updating the .host file.