使用docker-compose时,redis容器出现连接被拒绝的问题

简而言之。

学習Docker时,由于容器间通信出现问题,我遇到了相当困扰,因此做了这个备忘录。
当在容器之间进行访问时,使用的主机不是127.0.0.1,而是一个名为”redis”的容器。

docker-compose.yml可以进行改写为:

version: "3.4"

services:
  web: 
    image: nginx:1.15
    links:
      - app
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ../:/usr/local/dir
    ports:
      - "8888:80"
    env_file: .env

  app:
    build: .
    tty: true
    working_dir: /usr/local/dir
    links:
      - redis
    volumes:
      - ../:/usr/local/dir
    env_file: .env

  redis:
    image: redis:latest
    ports:
      - 6379:6379
    command: redis-server

    • 構成はphp7.3-alpine+nginx+redisでPHPでPredis使用

PHP内で以下のようにPredisをnew

public function __construcr($port, $host)
{
    $client = new Predis\Client([
        'scheme' => 'tcp',
        'host'   => $host,
        'port'   => $port,
    ]);
}

    • この$hostの実態は、$_SERVERから取得した127.0.0.1

ログを見るとnewはできているものの、Predis呼び出しの時にConnection Refused 127.0.0.1:6379的なメッセージが

public function __construcr($port, $host)
{
    //このホストを127.0.0.1=>"redis"に
    $client = new Predis\Client([
        'scheme' => 'tcp',
        'host'   => $host,
        'port'   => $port,
    ]);
}

    • この127.0.0.1というのはappコンテナ内だと、そのコンテナ(appコンテナ)のIPアドレス

 

    • redisコンテナは別なので、ホスト名を明示的にしてあげないとアクセスできない

 

    ただ同じネットワーク内なのでredisと明示してあげればOK
广告
将在 10 秒后关闭
bannerAds