web-dev-qa-db-ja.com

docker-composeセットアップでredis-cliを呼び出す

docker-composeセットアップで公式のRedisイメージ https://hub.docker.com/_/redis/ を実行します。

myredis:
  image: redis

そのイメージでdocker-composeを使用してredis-cliを実行するにはどうすればよいですか?
次のことを試しましたが、接続できませんでした。

docker-compose run myredis redis-cli
> Could not connect to Redis at 127.0.0.1:6379: Connection refuse

画像のドキュメントには、実行する必要があると書かれています:

docker run -it --rm \
--link some-redis:redis \
redis \
sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'

これはどのようにdocker-compose runに変換されますか?

20
ivoba

それはオーバーライドします デフォルトCMD [ "redis-server" ]redis-cliが実行されなかったコンテナでredis-serverを実行しようとしています。

ここで述べたように 、以下を使用してテストすることもできます:

docker exec -it myredis redis-cli

前述のように、docker-composeから このdocker/composeの課題212

rcli:
  image: redis:latest
  links:
    - redis
  command: >
     sh -c 'redis-cli -h redis '

これも動作するはずです:

rcli:
  image: redis:latest
  links:
    - redis
  command: redis-cli -h redis

OP ivoba が確認するように( コメント内 )、最後のフォームが機能します。
その後:

docker-compose run rcli

ivobaは以下も追加します:

docker-compose run redis redis-cli -h redisは、コンテナが実行されている場合にも機能します。
この方法では、別個のrcliコンテナを宣言する必要はありません。

43
VonC

次のコマンドも使用できます。

docker-compose run myredis redis-cli -h myredis
4
Hamid FzM

@VonCが示唆するとおりにフォローしましたが、私の場合は、事前定義されたネットワークでredisを実行したため、動作しませんでした。

そのため、特定のネットワークでredisコンテナを実行する場合、networkフィールドをdocker-compose.yamlファイルで指定する必要があります

rcli:
  image: redis:latest
  links:
    - redis
  command: redis-cli -h redis
  networks: 
    - <network redis run on>
1
zeroFruit