web-dev-qa-db-ja.com

Dockerがyml静的IPアドレスを構成する

私はそのようなdocker-compose.ymlを持っています(ここに完全なリストではありません):

version: '2'

services:

  nginx:
    build: ./nginx/
    ports:
      - 8080:80
    links:
      - php
    volumes_from:
      - app
    networks:
      app_subnet:
        ipv4_address: 172.16.1.3

  php:
    build: ./php/
    expose:
      - 9000
    volumes_from:
      - app
    networks:
      app_subnet:
        ipv4_address: 172.16.1.4

    networks:
      app_subnet:
        driver: bridge
        ipam:
        config:
          - subnet: 172.16.1.0/24
          gateway: 172.16.1.1

docker-compose upの後、次のようなエラーが発生しました。

ユーザー指定のIPアドレスは、ユーザー構成のサブネットを持つネットワークに接続する場合にのみサポートされます

だから私はdocker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_subnetでサブネットを作成しています

しかし、docker-composeがdev_app_subnetという名前のサブネットをその場で作成するため、これは問題を解決しません。そして、私のサブネットは使用されていません-同じエラーが発生しています。これを行う主な目的は、nginxサービスに静的IPを割り当てることです。etc/ hostsファイルからプロジェクトのWeb URLを開きます。

9
alvery

[解決済み]ソリューションが見つかりました。ネットワークを指す場合は、「external」フラグを使用して、ネットワークがすでに作成されており、外部に取得する必要があることを伝えます(それ以外の場合は、プロジェクトプレフィックスを使用してオンザフライで作成されます)。

networks:
  app_subnet:
    external: true

そのため、そのdocker-composeが既存のapp_subnetにコンテナーをアタッチする前に、サブネットを作成する必要があります。

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_subnet
14
alvery

私の場合、私は最初にdocker-compose upは失敗しましたが、ネットワークはすでに作成されており、docker network ls

この場合、docker-compose down、ymlを修正して再実行docker-compose up 結構です

2
tony.hokan

スクリプトの前回の実行から、ネットワークインターフェイスは既に作成されていますが、サブネットパラメーターがない可能性があります。

それを修正するために

docker network ls -a

そして、サービスの作成をブロックしているネットワークを削除します

docker network rm <network interface id> 
0

Docker stack deployを使用してswarmクラスターをデプロイする場合に具体的に説明します。また、サブネットのスコープを「スウォーム」として指定する必要があります。

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 --scope swarm app_subnet

docker-compose.ymlで、外部ネットワークを次のように指定する必要があります。

ネットワーク:デフォルト:外部:名前:etl_subnet

デフォルトとして使用します。

0
Qiushi