在docker-compose设置中调用redis-cli

ivo*_*oba 22 docker docker-compose

我在设置中运行官方Redis图像https://hub.docker.com/_/redis/docker-compose.

myredis:
  image: redis
Run Code Online (Sandbox Code Playgroud)

如何redis-cli在该图像上使用docker-compose 运行?
我尝试了以下,但它没有连接:

docker-compose run myredis redis-cli
> Could not connect to Redis at 127.0.0.1:6379: Connection refuse
Run Code Online (Sandbox Code Playgroud)

图像的文档说我应该运行:

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"'
Run Code Online (Sandbox Code Playgroud)

这如何转化为docker-compose run

Von*_*onC 45

这将覆盖默认值CMD [ "redis-server" ]:您尝试在从未执行redis-cli过的容器上运行redis-server.

如前所述,您还可以测试:

docker exec -it myredis redis-cli
Run Code Online (Sandbox Code Playgroud)

来自docker-compose,如此docker/compose issue 2123中所述:

rcli:
  image: redis:latest
  links:
    - redis
  command: >
     sh -c 'redis-cli -h redis '
Run Code Online (Sandbox Code Playgroud)

这也应该有效:

rcli:
  image: redis:latest
  links:
    - redis
  command: redis-cli -h redis
Run Code Online (Sandbox Code Playgroud)

正如OP ivoba确认(在评论中),最后一种形式有效.
然后:

docker-compose run rcli
Run Code Online (Sandbox Code Playgroud)

ivoba还补充说:

docker-compose run redis redis-cli -h redis当容器运行时也可以工作.
这样就没有必要声明一个单独的rcli容器.

  • 当容器正在运行时,“ docker-compose run redis redis-cli -h redis”也可以工作。这样,就不必声明单独的rcli容器。 (2认同)

Ham*_*FzM 5

您也可以使用以下命令:

docker-compose run myredis redis-cli -h myredis
Run Code Online (Sandbox Code Playgroud)

  • 这在上面的答案中已经说过,只是名称不同 (3认同)