使用Docker Compose的交互式shell

有什么办法只使用Docker Compose在容器中启动交互式shell? 我试过这样的事情,在我的docker-compose.yml中:

myapp: image: alpine:latest entrypoint: /bin/sh 

当我使用docker启动这个容器时,立即退出。 有没有我可以添加到入口点命令的标志,或者作为和myapp的附加选项,以交互式shell启动?

我知道有本地docker命令选项来实现这一点,只是好奇,如果它也可能只使用Docker撰写。

最好的问候,鲍里斯

您需要在docker-compose.yml中包含以下行:

 stdin_open: true tty: true 

第一个对应于docker run -i ,第二个对应于-t

使用docker-compose run --rm myapp获取交互式shell的规范方法是使用: docker-compose run --rm myapp

你可以设置stdin_open: true, tty: true ,但是实际上并不会给你一个合适的shell,因为日志是从所有的容器中stream出来的。

你也可以使用

 docker exec -ti <container name> /bin/bash 

在正在运行的容器上获得一个shell。

使用docker-compose,我发现最简单的方法就是做一个docker ps -a (在用docker-compose up启动我的容器docker-compose up )并获取我想要一个交互式shell的容器的ID(让我们调用它xyz123)。

然后执行docker exec -ti xyz123 /bin/bash是一件简单的事情

瞧,一个互动的shell。

在官方入门示例( https://docs.docker.com/compose/gettingstarted/ )中使用以下docker-compose.yml

 version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" 

在用docker-compose up ,可以很容易地将shell放入你的redis容器或web容器中:

 docker-compose exec redis sh docker-compose exec web sh