如何通过 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 创建的服务的主要内容,如果未能解决你的问题,请参考以下文章
ESXi 使用 ssh 进入显示器管理界面(接显示显示的那种)