docker compose如何将我的服务名称映射到IP地址?

docker compose如何将我的服务名称映射到IP地址?,docker,nginx,networking,docker-compose,Docker,Nginx,Networking,Docker Compose,我有一个docker-compose.yml文件,用于运行web应用程序 version: '3' services: web: entrypoint: gunicorn myapp.wsgi:application --bind 0.0.0.0:7000 ... nginx: ports: # HOST:CONTAINER - 80:80 - 443:443 ... 在mynginx服务的容器内: $ cat /et

我有一个docker-compose.yml文件,用于运行web应用程序

version: '3'
services:
  web:
    entrypoint: gunicorn myapp.wsgi:application --bind 0.0.0.0:7000
    ...
  nginx:
    ports:
      # HOST:CONTAINER
      - 80:80
      - 443:443
    ...
在my
nginx
服务的容器内:

$ cat /etc/hosts

127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.144.4   790c0822b887

$ curl http://web:7000

<h1>Bad Request (400)</h1>

$ traceroute web

traceroute to web (192.168.144.3), 30 hops max, 46 byte packets
 1  ec2-user_web_1.ec2-user_default (192.168.144.3)  0.008 ms  0.007 ms  0.006 ms
$cat/etc/hosts
127.0.0.1本地主机
::1本地主机ip6本地主机ip6环回
fe00::0 ip6 localnet
ff00::0 ip6 mcastprefix
ff02::1 ip6所有节点
ff02::2 ip6所有路由器
192.168.144.4 790c0822b887
$curlhttp://web:7000
错误请求(400)
$traceroute网络
追踪路由到web(192.168.144.3),最多30跳,46字节数据包
1 ec2-user\U web\U 1.ec2-user\U默认值(192.168.144.3)0.008毫秒0.007毫秒0.006毫秒
因此,我可以查找web主机名,并将其映射到IP地址
192.168.144.3
,但在
/etc/hosts
文件中看不到它

docker compose
如何专门设置此容器,以便
curl
知道IP地址?

(搜索“容器之间的自动DNS解析”),以及。如果查看容器中的
/etc/resolv.conf
,它应该指向Docker私有IP地址,该地址为通用Internet和其他容器提供主机名解析


更具体地说,在Docker Compose上下文中,
services:
块中的每个条目的名称可以由从同一
Docker Compose.yml
文件启动的其他容器解析为主机名。您不需要设置
容器名称:
主机名:
链接:
,或
网络:
;这一切都是为您自动配置的。

我以前看到过,但忘了回复+标记为正确。谢谢你!肯定从这一点上了解了docker网络。从技术角度来看,使用
/etc/resolv.conf
而不是
/etc/hosts
有什么理由吗?我对Linux网络不是最熟悉的。如果您使用
/etc/hosts
,您需要希望在每个系统或容器上手动输入相同的主机到IP映射,如果您添加、更改或删除地址,您必须记住在任何地方都进行相同的更改。Docker和Kubernetes都提供内部DNS服务,云提供商提供DNS服务(如Amazon Route 53),DNS服务器(如BIND和dnsmasq)都是预打包的,因此您几乎不应该使用
/etc/hosts