有什么方法可以在容器中只使用Docker Compose启动一个交互式shell吗?我在docker-compose.yml中尝试过这样的东西:

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

当我使用docker-compose up启动这个容器时,它立即退出。是否有任何标志,我可以添加到入口点命令,或作为myapp的额外选项,以启动交互式shell?

我知道有本地docker命令选项来实现这一点,只是好奇是否只使用docker Compose也可以。


当前回答

如果有来自未来的人也在这里游荡

docker-compose exec service_name sh

or

docker-compose exec service_name bash

或者你可以像这样单行

docker-compose exec service_name php -v

这是在容器已经启动并运行之后。

service_name在docker-compose中定义。yml文件

其他回答

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

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

当你开始使用docker-compose up,你可以shell到你的redis容器或你的web容器:

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

使用docker-compose,我发现最简单的方法是做一个docker ps -a(启动我的容器与docker-compose up),并获得我想要有一个交互式shell的容器的ID(让我们称之为xyz123)。

那么执行起来就很简单了 Docker exec -ti xyz123 /bin/bash

瞧,一个交互壳。

如果有来自未来的人也在这里游荡

docker-compose exec service_name sh

or

docker-compose exec service_name bash

或者你可以像这样单行

docker-compose exec service_name php -v

这是在容器已经启动并运行之后。

service_name在docker-compose中定义。yml文件

根据文档-> https://docs.docker.com/compose/reference/run/

你可以使用这个docker-compose run——rm app bash

[app]是docker-compose.yml中服务的名称

这是对这个老问题的补充,因为我上次只有这个箱子。sh和bash之间的区别。因此,对于某些bash不工作,而只有sh可以工作的情况可能会发生。

所以你可以: docker-compose exec CONTAINER_NAME sh

在大多数情况下:docker-compose exec CONTAINER_NAME bash

use.

如果你有时间的话。sh和bash之间的区别在这里有很好的解释: https://www.baeldung.com/linux/sh-vs-bash