dockerコンテナ間の通信エラー

引っ越しが一段落したのでAdseseの再設定をしていると「AMP自動広告」という単語が目に入りました。
モバイル向けの高速化は当ブログには不要と思うのですが、「自動広告」は魅力的です。元々自動広告をいれていたのですが、ついでにAMP自動広告の設定も入れてみました。

それに合わせてwordpressのAMPプラグイン(google公式?)を導入しました。

するとエラーが発生!!

cURL error 7:Failed to connect to momiji.com port 443:Host is unreachable. 

wordpressコンテナからnginxコンテナへのドメイン名での通信ができていないようです。(cUrlだけエラーで、pingやnslookupは上手くいくのですが)
そういえば、構築中にもcUrlエラーが発生して困りました(別の手段で凌ぎました)

ipアドレスを調べてhostsに書いて回避してみたりしたのですが、少し環境をいぢるとすぐに消えてしまいます・・・(再構築するのでw)

そこで本格対策を調べた結果、よい対策が見つかりました!

最初にdocker-compose内でlinksを指定するとうまくいったのですが、公式ドキュメントを見てみると
・linksはレガシー機能なので、近いうちに削除するぞ!
と書いてありました。

そこで公式推奨のnetowork定義を追加した結果、以下の定義でうまくいきました。

version: '3'
services:

  wordpress:
    image: wordpress:fpm-alpine
    depends_on:
      - mysql
    container_name: momiji-wp
    restart: unless-stopped
    networks:
      default:
    volumes:
      - www:/var/www/html
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: xxxx
      WORDPRESS_DB_PASSWORD: xxxxxxxx
      WORDPRESS_DB_NAME: wordpress

  nginx:
    build: ./nginx
    container_name: momiji-www
    restart: unless-stopped
    networks:
      default:
        aliases:
          - momiji.com
          - www.momiji.com
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx_conf:/etc/nginx/conf.d
      - certkeys:/etc/letsencrypt
      - www:/var/www/html

  mysql:
    image: mysql:5.7
    container_name: momiji-db
    restart: unless-stopped
    networks:
      default:
    volumes:
      - db:/var/lib/mysql
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: xxxx
      MYSQL_PASSWORD: xxxxxxxx
      MYSQL_ROOT_PASSWORD: xxxxxxxx

networks:
  default:

volumes:
  www:
  db:
  certkeys:

変更箇所

  1. デフォルトのnetworks定義を追加
  2. wordpress、nginx、mysqlの各サービスにnetowroks定義を追加
  3. nginxサービスにaliasesを追加

3のaliases追加で、指定されたネットワークにそのサービスのalias名が追加されるようです。(hostsに追加されるわけではありません)

散々苦労してAMPを追加した結果、エラーが多すぎて対応をあきらめましたとさ・・・_| ̄|○

コメントを残す

メールアドレスが公開されることはありません。