【问题标题】:How to ssh into the services create using docker-compose如何通过 ssh 进入使用 docker-compose 创建的服务
【发布时间】:2018-10-26 06:28:53
【问题描述】:

这是我的 docker compose 文件

version: '2'

# based off compose-sample-2, only we build nginx.conf into image
# uses sample site from https://startbootstrap.com/template-overviews/agency/

services:
  proxy:
    build:
      context: .
      dockerfile: nginx.Dockerfile
    ports:
      - '80:80'
  web:
    image: httpd
    volumes:
      - ./html:/usr/local/apache2/htdocs/

现在我可以通过 ssh 访问任何在我运行 docker-compose up 时创建的服务

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

标准机制不是将ssh 连接到容器中,而是使用docker exec 连接到容器。给定一个像 3cdb7385c127 这样的容器 ID,您可以使用

连接(又名 ssh 到其中)
docker exec -it 3cdb7385c127 sh

如果容器中有 bash,则可以使用完整的登录 shell

docker exec -it 3cdb7385c127 bash -l

如果您愿意,您仍然可以ssh 进入容器,但您需要安装、配置和运行ssh 服务器,并且您需要能够从外部访问容器 IP 或重定向容器: 22 到主机上的某个端口。

【讨论】:

    【解决方案2】:
    1. 执行 'docker ps' 以获取容器的名称和 docker id。
    2. 做'docker exec <docker_id> -it /bin/bash'

    这将在容器内为您提供 bash 提示。

    【讨论】:

    • 注意:对我来说命令是docker exec -it <docker_it> /bin/bash
    【解决方案3】:

    如果您在 docker-compose.yaml 文件中指定 container_name,则可以使用 docker exec 命令登录。

    例子:

    django:
        container_name: django
        more_stuff: ...
    

    然后,登录到正在运行的 docker-compose:

    docker exec -it django /bin/bash
    

    这对我来说效果更好,因为我不需要检查当前运行的 ID,而且我很容易记住。

    【讨论】:

      【解决方案4】:

      最简单的方法是运行docker-compose exec 命令:

      docker-compose exec web /bin/bash
      

      使用最新版本的 docker,由于“Docker Compose 现在在 Docker CLI 中”,您可以这样做:

      docker compose exec web /bin/bash
      

      如果你确实想使用纯 docker 命令,你可以这样做:

      web=`docker container ls |grep web |awk '{print \$1}'`
      docker container exec -it $web /bin/bash
      

      或单行:

      docker container exec -it `docker container ls |grep web |awk '{print \$1}'` /bin/bash
      

      我们首先在其中找到容器 id,然后运行熟悉的docker container exec -it 命令。

      正如问题中提到的,服务容器是通过运行docker-compose up 创建的。因此我不认为docker-compose run 是合适的答案,因为它会在我的测试中启动一个容器。

      【讨论】:

        【解决方案5】:

        虽然使用docker 命令也有效,但不需要找出容器ID 的最简单方法是使用docker-compose run 子命令,例如:

        service="web"
        docker-compose run $service /bin/bash
        

        【讨论】:

          猜你喜欢
          • 2018-11-19
          • 1970-01-01
          • 1970-01-01
          • 2023-02-02
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 2011-12-01
          • 2011-04-10
          相关资源
          最近更新 更多