多くの人がこれに苦労しており、redisコンテナのイメージにバグがあるように感じ、他の人も同様の問題を追いかけているように見えます。
DockerHubで標準のredisイメージを使用しています。 ( https://github.com/dockerfile/redis )
次のように実行します:
docker run -it -p 6379:6379 redis bash
入ったら、サーバーを起動して、コンテナーイメージからredis pingを実行できます。
残念ながら、ホストからredisコンテナーに接続できません。
以下のような設定を試みました。
bind 127.0.0.1
構成からバインドを削除しました
そして、保護モードをオフにしてみました
protected-mode no
ただテストするためにポートを変更したので、構成ファイルを読み取っていることを知っており、それを行うことができました。
Windows 10を実行しているので、Windowsネットワークの問題である可能性があります。通常、Dockerに問題はありません。私は困惑しています
問題はバインドにあります。次を設定する必要があります。
bind 0.0.0.0
これは、1つのインターフェース(eth0
)とループバック(redis
)がコンテナー化された環境で、使用可能なすべてのインターフェースにバインドするようにlo
を設定し、上記の両方にバインドします。 config file
の他のディレクティブを介して、またはfirewalls
などの外部ツールを使用して、セキュリティ対策を追加することを検討する必要があります。このアプローチでは、誰でもredis
サーバーに接続できるためです。
デフォルト設定はbind 127.0.0.1
であり、この設定によりredis
はループバックインターフェイスでのみリッスンされ、コンテナー内からのみアクセス可能になります。 (セキュリティのため)
カスタム構成ファイルでredisを実行するには:
Sudo docker run -d --name redis-test -p 6379:6379 -v /path/to/redisconf/redis.conf:/redis.conf redis redis-server /redis.conf
redis-tools
がインストールされたdockerホストで確認するには:
Sudo redis-cli
127.0.0.1:6379>
127.0.0.1:6379> set farhad likes:stackoverflow
OK
127.0.0.1:6379> get farhad
"likes:stackoverflow"
127.0.0.1:6379>
また、外部ホストからredis
コンテナに接続することもできます:
redis-cli -h 'IP-address-of-dockerhost-running-redis-container'
これを適切に機能させるための手順を次に示します。
curl -fsSL https://get.docker.com -o get-docker.sh
Sudo sh get-docker.sh
systemctl enable docker ; systemctl start docker; systemctl status docker
便利なスクリプトを使用してインストールする を参照してください
mkdir -p /etc/redis/
chown -R 1000:1000 /etc/redis
Sudo docker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/redis/:/data redis redis-server /data
注:ソリューションの重要な部分は、ポートをドッカーホストに公開(-p 6379:6379)し、コンテナポートにルーティングすることです。 Redis Docker Documentation を参照してください
バージョン4.0.9
(Docker Toolbox on Win10
)を使用すると簡単になります。単純にredisクライアントに接続してから:
set bind 0.0.0.0
save
新しい設定は、停止/開始後に保持されます。