【问题标题】:How to enter a redis-server shell inside a running docker-compose container如何在正在运行的 docker-compose 容器中输入 redis-server shell
【发布时间】:2017-02-07 07:13:26
【问题描述】:

我想看看redis-server容器的运行状态。所以我想在redis shell中执行info,看看redis slave是否与远程redis master同步。

我的 docker-compose 文件列出的 redis 如下:

  placements-store:
    image: redis:3.0
    command: redis-server ${REDIS_OPTIONS}
    ports:
      - "6379:6379"

正在运行docker-compose ps 我可以看到容器已启动并正在运行:

app_placements-store_1   docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp 

我尝试执行:

docker-compose run --rm redis-cli

得到:

ERROR: No such service: redis-cli

我认为这是可以理解的,因为没有 redis-cli 容器。我正在尝试标记正在运行的 redis-server,但不知道该怎么做。

更新

我可以通过执行查看日志:

docker-compose logs -f --tail 500 placements-store

我确实得到了一些如下信息,但我正在寻找更多信息以及我可以更轻松地从外部控制的信息:

placements-store_1  | 1:S 06 Feb 19:16:35.427 * Connecting to MASTER mo-api.mydomain.com:6379
placements-store_1  | 1:S 06 Feb 19:16:35.589 * MASTER <-> SLAVE sync started
placements-store_1  | 1:S 06 Feb 19:16:35.889 * Non blocking connect for SYNC fired the event.
placements-store_1  | 1:S 06 Feb 19:16:36.189 * Master replied to PING, replication can continue...
placements-store_1  | 1:S 06 Feb 19:16:36.790 * Partial resynchronization not possible (no cached master)
placements-store_1  | 1:S 06 Feb 19:16:37.091 * Full resync from master: 5ada1d8c65fd49d67d931bea66530a169ce83a40:29442
placements-store_1  | 1:S 06 Feb 19:16:37.145 * MASTER <-> SLAVE sync: receiving 60 bytes from master
placements-store_1  | 1:S 06 Feb 19:16:37.145 * MASTER <-> SLAVE sync: Flushing old data
placements-store_1  | 1:S 06 Feb 19:16:37.145 * MASTER <-> SLAVE sync: Loading DB in memory
placements-store_1  | 1:S 06 Feb 19:16:37.145 * MASTER <-> SLAVE sync: Finished with success 

【问题讨论】:

    标签: redis docker-compose


    【解决方案1】:

    您需要使用docker exec 登录到容器(如另一个答案中所述 - 不确定该命令是否 100% 正确,因为它可能只是运行redis-cli 然后退出)。

    我会运行以下命令:

    docker exec -it app_placements-store_1 sh

    这将使您登录到容器。然后您可以从命令提示符运行redis-cli

    【讨论】:

      【解决方案2】:

      使用docker exec 在正在运行的容器中执行命令:

      docker exec -it app_placements-store_1 redis-cli

      【讨论】:

        【解决方案3】:

        虽然已经给出了答案,但我会为遇到此类问题的 docker 新手详细解释一下。

        命令docker exec 用于从您的机器终端运行一个用于容器的命令。

        您也可以通过执行命令docker exec --help获得该命令的详细帮助:

        Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
        
        Run a command in a running container
        
        Options:
          -d, --detach               Detached mode: run command in the background
          --detach-keys string   Override the key sequence for detaching a
                                 container
          -e, --env list             Set environment variables
          --help                 Print usage
          **-i, --interactive          Keep STDIN open even if not attached**
          --privileged           Give extended privileges to the command
          **-t, --tty                  Allocate a pseudo-TTY**
          -u, --user string          Username or UID (format:
                                 <name|uid>[:<group|gid>])
        

        这个docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 清楚地表明您需要CONTAINERCOMMAND 以及参数。例如:docker exec -it app_placements-store_1 redis-cli

        注意:我已经显示了 '-iandtas bold in the output ofdocker exec --help` 以便您可以阅读它为什么我们使用这些选项

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-21
          • 1970-01-01
          • 2021-12-01
          • 2016-03-04
          相关资源
          最近更新 更多