如何通过 ssh 进入使用 docker-compose 创建的服务

Posted

技术标签:

【中文标题】如何通过 ssh 进入使用 docker-compose 创建的服务【英文标题】:How to ssh into the services create using 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 时创建的服务

【问题讨论】:

也许这会对你有所帮助:How to get into a docker container? How to get into a docker container?的可能重复 【参考方案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】:
    执行 'docker ps' 以获取容器的名称和 docker id。 做'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

【讨论】:

以上是关于如何通过 ssh 进入使用 docker-compose 创建的服务的主要内容,如果未能解决你的问题,请参考以下文章

SSH 进入 AWS Cloud9 环境

Linux如何开机启动启动ssh服务

ESXi 使用 ssh 进入显示器管理界面(接显示显示的那种)

如何通过ssh远程登录linux系统

在 Gitlab CI 构建中,我无法通过私钥 ssh 进入 AWS EC2

Telnet 命令进入(通过,内部)SSH 会话