有什么方法可以在容器中只使用Docker Compose启动一个交互式shell吗?我在docker-compose.yml中尝试过这样的东西:
myapp:
image: alpine:latest
entrypoint: /bin/sh
当我使用docker-compose up启动这个容器时,它立即退出。是否有任何标志,我可以添加到入口点命令,或作为myapp的额外选项,以启动交互式shell?
我知道有本地docker命令选项来实现这一点,只是好奇是否只使用docker Compose也可以。
使用docker-compose获得交互式shell的规范方法是使用:
docker-compose run --rm myapp
(服务名myapp取自您的示例。更通用的是:它必须是docker-compose文件中现有的服务名称,myapp不仅仅是您选择的命令。示例:bash而不是myapp将不能在这里工作。)
你可以设置stdin_open: true, tty: true,但是这实际上不会给你一个合适的shell up,因为日志是从所有容器中流出来的。
你也可以使用
docker exec -ti <container name> /bin/bash
在运行的容器上获得外壳。
这个问题对我来说非常有趣,因为我有问题,当我运行容器执行完成后立即退出,我用-it修复:
docker run -it -p 3000:3000 -v /app/node_modules -v $(pwd):/app <your_container_id>
当我必须用docker compose自动化它时:
version: '3'
services:
frontend:
stdin_open: true
tty: true
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- /app/node_modules
- .:/app
这就是诀窍:stdin_open: true, tty: true
这是一个用create-react-app生成的项目
Dockerfile.dev看起来是这样的:
FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
希望这个例子能帮助其他人在docker容器中运行一个前端(例如react)。