0

我有以下docker-compose.yml

php:
    build: ./phpfpm
    volumes:
        - ~/works/codes:/code

web:
    image: nginx:latest
    ports:
        - "80:80"
    volumes:
        - ~/works/codes:/code
        - ./nginx/etc/conf.d/virtual.conf:/etc/nginx/conf.d/virtual.conf
        - ./nginx/var/log/nginx:/var/log/nginx
    links:
        - php

我在 Web 容器中设置了 2 个虚拟主机

app.lan
api.lan

在我的php应用程序中,我卷曲到api.lan. 但它抛出Could not resolve host: api.lan

在我的 docker 主机中,我在文件中添加了以下/etc/hosts内容

127.0.0.1 app.lan
127.0.0.1 api.lan

我可以从 docker 主机卷曲到api.lan没有问题。但似乎web容器不能从 docker 主机解析名称。

如果我找到web容器的 ip 并将其放入 php 容器的主机文件中,如下所示。

172.18.0.5 api.lan

但是如何在 docker compose 上自动执行此操作。或任何其他最佳实践?

此外,如果我/etc/resolve.conf对任一容器进行 cat,我可以找到以下内容。

search local
nameserver 127.0.0.11
options ndots:0

这是什么 127.0.0.11?是主机吗?

我在“Docker for mac”v 1.12.1

4

3 回答 3

1

127.0.0.11 是 docker 的内部 dns,它允许容器通过名称(在您的情况下为“web”和“php”)直接相互通信。

您可以使用docker-compose.yml 中的额外主机向 docker 添加额外条目。

于 2016-10-13T09:42:14.057 回答
1

在我的 php 应用程序中,我卷曲到api.lan

不要那样做。使用 docker 提供的主机名webphp(您为服务提供的名称docker-compose.yml被创建为其他容器可以使用的主机名。

于 2016-10-13T19:38:51.183 回答
1

正如@Chris 指出的那样,我需要使用 docker extra_hosts,还需要创建一个网络并将 IP 分配给每个 docker 容器。

以下是我的完整docker-compose.yml

version: "2"

networks:
    lan_0:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 172.19.0.0/24
                  gateway: 172.19.0.21

services:
    php:
        build: ./phpfpm
        volumes:
            - ~/works/codes:/code
        extra_hosts:
            - "api.lan:172.19.0.21"
        networks:
            lan_0:
                ipv4_address: 172.19.0.22

    web:
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ~/works/codes:/code
            - ./nginx/etc/conf.d/virtual.conf:/etc/nginx/conf.d/virtual.conf
            - ./nginx/var/log/nginx:/var/log/nginx
        links:
            - php
        networks:
            lan_0:
                ipv4_address: 172.19.0.21
于 2016-10-25T18:11:36.440 回答