使用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