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アプリケーションでは、curl を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問題なく curl できます。しかし、webコンテナはdockerホストマシンから名前を解決していないようです。

コンテナーの IPを見つけて、webそれを次のように php コンテナーのホスト ファイルに入れると、機能します。

172.18.0.5 api.lan

しかし、docker compose でこれを自動化するにはどうすればよいですか。または、これに関する他のベストプラクティスはありますか?

さらに/etc/resolve.conf、どちらかのコンテナを猫にすると、次のことがわかります。

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

@Chris が指摘したように、docker を使用する必要がありextra_hosts、ネットワークを作成して各 docker コンテナーに IP を割り当てる必要もありました。

以下は私のフルです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 に答える
1

127.0.0.11 は、コンテナーが名前 (この場合は「web」と「php」) で直接相互に通信できるようにする docker の内部 dn です。

docker-compose.yml で追加のホストを使用して、docker に追加のエントリを追加できます。

于 2016-10-13T09:42:14.057 に答える
1

私のphpアプリケーションでは、カールしますapi.lan

そうしないでください。docker によって提供されたホスト名を使用してくださいweb(phpサービスに指定した名前はdocker-compose.yml、他のコンテナーで使用できるホスト名として作成されます。

于 2016-10-13T19:38:51.183 に答える