2016-04-18 7 views
1

docker-compose.ymlの中にmariadbとphp-fpmコンテナがある(グローバル)コンテナがあります。これらはリンクされていますが、dbコンテナのipとportはphp-fpmの環境変数にはありません。 dockerコンテナリンクがenvや/ etc/hostsにありません

は、私はこのようなmariadbコンテナを開始しました:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=.... -dP mariadb 

マイドッキングウィンドウ-compose.ymlは、次のようになります。

version: "2" 
services: 
    nginx: 
    build: 
     context: . 
     dockerfile: docker/nginx/Dockerfile 
    ports: 
     - 80 
    links: 
     - fpm 
    volumes_from: 
     - app 
    fpm: 
    build: 
     context: . 
     dockerfile: docker/fpm/Dockerfile 
    external_links: 
     - db 
    volumes_from: 
     - app 
    app: 
    build: 
     context: . 
     dockerfile: docker/app/Dockerfile 
    volumes: 
#  - /app 
     - .:/app:ro 

マイFPM Dockerfile:

FROM php:fpm 

RUN docker-php-ext-install pdo pdo_mysql 

環境変数でphpinfo()

PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME db14e2928ed6 
PHP_INI_DIR /usr/local/etc/php 
PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data 
GPG_KEYS 1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763 
PHP_VERSION 7.0.5 
PHP_FILENAME php-7.0.5.tar.xz 
PHP_SHA256 c41f1a03c24119c0dd9b741cdb67880486e64349fc33527767f6dc28d3803abb 
HOME /var/www 
USER www-data 

編集:

私は、PHP-FPMが台無しないことを確認するためにUbuntuのコンテナにリンクしてみました。これは一時的なコンテナとして機能しますが、docker-compose.yamlにexternal_linkという名前を付けてenvや/ etc/hostsからも消えます。

version: "2" 
services: 
    test: 
    image: ubuntu 
    external_links: 
     - db 
+0

参考:「注:バージョン2のファイル形式を使用している場合、外部で作成されたコンテナは、リンク先のサービスと同じネットワークの少なくとも1つに接続する必要があります。 –

+0

バージョン2のファイルは、ユーザ定義のネットワークを使用しますが、これはもはや '/ etc/hosts'を使用しません。名前解決を処理する組み込みDNSサーバーがあります。 – dnephin

+1

組み込みDNSサーバを使用してdbにアクセスするにはどうすればよいですか?私は 'db'(' $ netcat db 3306 '' nc:getaddrinfo:名前またはサービスが知られていない ')を解決できません – schokocappucino

答えて

0

ソリューションは、新しいブリッジネットワークを作成し、このネットワークに外部のデータベースコンテナを接続し、同じネットワークにFPMコンテナを追加することでした。

$ docker network create -d bridge dbnetwork 
$ docker network connect dbnetwork db 

とドッキングウィンドウ-compose.yml:

version: "2" 
services: 
    nginx: 
    build: 
     context: . 
     dockerfile: docker/nginx/Dockerfile 
    ports: 
     - 80 
    links: 
     - fpm 
    volumes_from: 
     - app 
    fpm: 
    build: 
     context: . 
     dockerfile: docker/fpm/Dockerfile 
    external_links: 
     - db 
    volumes_from: 
     - app 
    networks: 
     - default 
     - dbnetwork 
    app: 
    build: 
     context: . 
     dockerfile: docker/app/Dockerfile 
    volumes: 
     - .:/app:ro 
networks: 
    dbnetwork: 
    external: true 

defaultは、ドッキングウィンドウ-compose.yml内の他のすべてのコンテナが接続されているデフォルトのネットワークです。私はそれを追加しなければならなかった、そうでなければfpmはデータベースとしか話せない。データベースコンテナはdbまたはdb.dbnetworkとしてアクセスできます。

関連する問題