web-dev-qa-db-ja.com

Redis Docker接続が拒否されました

Redis Dockerインスタンスを作成しました

$ docker pull redis

その後、私はこのようにそれを実行しました。

$ docker run --name=redis --detach=true --publish=6379:6379 redis

私は以下を得ます

$ docker ps 
key        redis   "/sbin/entrypoint.sh"    22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   redis

上記のことは、ローカルホストのポート6379、127.0.0.1、または0.0.0.0でリスニングを実行していることを意味します。

しかし、驚いたことに、接続しようとすると、接続が拒否されて応答します。

誰かが光を投げてもらえますか?.

14
Ikenna Okpala

環境(OS、Dockerのインストールなど)に関する詳細情報を提供する必要がありますが、基本的には、次のようにRedisコンテナーを起動する場合:

docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest

何があってもポートを公開する必要があります。接続できない唯一の理由は、ブリッジインターフェースをめちゃくちゃにしたか、Linuxを使用しているか、独自のネットワークインターフェースとIPアドレスを備えたDockerマシンを使用していて、そのIPアドレスに再接続しないでください。 Mac用のDockerを使用している場合、Macホストでのブリッジングはまだ機能しないため、ローカルホストアドレスへのルーティングのみがサポートされます。

とにかく、Docker for Mac(古いDocker Toolboxではありません)を備えたMacOSでは、次の手順で作業を開始できます。

➜  ~ docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
6bfc6250cc505f82b56a405c44791f193ec5b53469f1625b289ef8a5d7d3b61e
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6bfc6250cc50        redis:latest        "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:6379->6379/tcp   redis-devel
➜  ~ redis-cli ping
PONG
➜  ~ 

検出されたredisのポートを見つけ、それを使用して接続します

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
1
Rajesh Guptan

Docker-compose https://docs.docker.com/compose/ を使用することをお勧めします

あなたのdocker-compose.yml

redis:                                                                          
  image: redis
ports:
  - "6379:6379" 

この後、実行できます:

$ docker-compose run redis /bin/bash
$ redis-server
$ redis-cli ping

返す必要があります:PONG

1
thiagovsk

Redisサーバーは正常に見えるため、Redisクライアントが原因のネットワークの問題のように見えます。

Redis Dockerページは少し混乱していることに注意してください。 redis-cliを介してredisに接続するには、次のように入力する必要があると記載されています。

docker run -it --network some-network --rm redis redis-cli -h some-redis

ただし、これにより、基本的にRedisクライアントである別のDockerコンテナーが作成されます。同じネットワークに接続されていないため、redisサーバーに接続できません。

あなたは次のように少し違うことをすることができます:

docker network create some-network
docker run --name redis-server --network some-network -d redis
docker run -it --network some-network --rm redis redis-cli -h redis-server

もう1つのオプションは、実際にポート6379をマッピングすることですが、自分のコンピューターにダウンロードする必要があるredisクライアントを使用する必要があります。

1
Idan P

Redisの設定例 を最初の場所として使用している場合(この問題が発生したときのように)、bind 127.0.0.1ディレクティブとprotected-mode yesの組み合わせでは許可されませんでしたDockerコンテナ間の通信用。私の目的のために、bindディレクティブをコメントアウトし、protected-modeディレクティブをnoに設定しました。

0
Marlorn