使用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
 
    