私はそのような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を開きます。
[解決済み]ソリューションが見つかりました。ネットワークを指す場合は、「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
私の場合、私は最初にdocker-compose up
は失敗しましたが、ネットワークはすでに作成されており、docker network ls
。
この場合、docker-compose down
、ymlを修正して再実行docker-compose up
結構です
スクリプトの前回の実行から、ネットワークインターフェイスは既に作成されていますが、サブネットパラメーターがない可能性があります。
それを修正するために
docker network ls -a
そして、サービスの作成をブロックしているネットワークを削除します
docker network rm <network interface id>
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
デフォルトとして使用します。