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