在docker-compose中将容器名称parsing为extra_hosts选项

我需要从另一个容器中curl我的API。 容器1被称为nginx容器2被称为fpm

我需要能够冲进我的FPM容器并curlnginx容器。

configuration:

services: nginx: build: context: . dockerfile: ./docker/nginx/Dockerfile volumes: - ./docker/nginx/conf/dev/api.conf:/etc/nginx/conf.d/default.conf ports: - 8080:80 links: - fpm fpm: build: context: . dockerfile: ./docker/fpm/Dockerfile volumes: - .:/var/www/html - ./docker/fpm/conf/dev/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini - ./docker/fpm/conf/dev/api.ini:/usr/local/etc/php/conf.d/api.ini env_file: - ./docker/mysql/mysql.env - ./docker/fpm/conf/dev/fpm.env links: - mysql shm_size: 256M extra_hosts: - myapi.docker:nginx 

我最初的想法是把它放在extra_hosts选项中,比如:

 extra_hosts: - myapi.docker:nginx 

但docker组成失败:

错误:对于apiwip_fpm_1无法创build容器服务fpm:add-host中的IP地址无效:“nginx”

我已经看到一些使用docker的networkingconfiguration的人的例子,但似乎只是解决一个地址。

如何解决/评估容器的IP地址,而不是直接传递?

快速修复就是将其指向由docker生成的dynamicIP。 这可能会改变,但是…是的。

find您的networking: docker network ls

 NETWORK ID NAME DRIVER SCOPE 72fef1ce7a50 apiwip_default bridge local <-- here cdf9d5b885f6 bridge bridge local 2f4f1e7038fa host host local a96919eea0f7 mgadmin_default bridge local 30386c421b70 none null local 5457b953fadc website2_default bridge local 1450ebeb9856 anotherapi_default bridge local 

复制NETWORK ID

docker network inspect 72fef1ce7a50

 "Containers": { "345026453e1390528b2bb7eac4c66160750081d78a77ac152a912f3de5fd912c": { "Name": "apiwip_nginx_1", "EndpointID": "6504a3e4714a6ba599ec882b21f956bfd1b1b7d19b8e04772abaa89c02b1a686", "MacAddress": "02:42:ac:14:00:05", "IPv4Address": "172.20.0.5/16", <-- CIDR block "IPv6Address": "" }, "ea89d3089193825209d0e23c8105312e3df7ad1bea6b915ec9f9325dfd11736c": { "Name": "apiwip_fpm_1", "EndpointID": "dc4ecc7f0706c0586cc39dbf8a05abc9cc70784f2d44c90de2e8dbdc9148a294", "MacAddress": "02:42:ac:14:00:04", "IPv4Address": "172.20.0.4/16", "IPv6Address": "" } }, 

将该CIDR块的IP地址添加到extra_hosts选项:

 extra_hosts: - myapi.docker:172.20.0.5 

从docker文件,

https://docs.docker.com/compose/networking/

您应该能够在您的dockernetworking中使用您的服务名称(本例中为nginx )作为主机名。 所以你可以打开我的FPM容器并调用curl nginx ,docker会为你解决这个问题。 希望这可以帮助。