docker compose 部署交互模式的容器-以Ubuntu为例
问题介绍
想通过 docker compose 方式部署一个交互模式的 Ubuntu 容器,但是以平常的方式执行部署后,发现容器被创建后就自动关闭了。而如果以 docker run
的方式部署的话就可以持续运行,命令:
docker run --name your_containername -dit -v your_path:container_path ubuntu:20.04 /bin/bash
分析发现关键在于命令中的参数 -it
其中
- -i:interactive 交互式操作;
- -t:terminal 终端。
如果不在 compose 文件中体现这两个参数的话,容器是不会持续运行的,而是创建成功后就自动关闭了。
解决方式
建立容器
在 docker-compose.yml
中添加两条语句:
stdin_open: true # 代表 docker run -i
tty: true # 代表 docker run -t
则最终的文件为:
# Creat self modified latex container
version: '3'
services:
ubuntu:
image: ubuntu:20.04 # 镜像名
stdin_open: true # 代表 docker run -i
tty: true # 代表 docker run -t
container_name: your_containername #容器名
restart: unless-stopped #重启策略
volumes: #挂载路径
- your_path:container_path
environment: #环境变量
- TZ=Asia/Shanghai #时区
logging: #日志设置
driver: json-file
options:
max-size: "200k"
max-file: "5"
再通过 docker ps
查看容器进程就能看到 Ubuntu 环境成功持续运行了。
初始配置环境
上步搭建完成后,进入容器环境:
docker exec -it container_name bash
。
进入容器内部后,首先安装 Ubuntu 基础的一些工具(容器是 root 的,所以命令均不需要 sudo
):
apt update #更新软件源
apt install vim # vim 编辑器
# 常用 Ubuntu 工具软件
apt install iputils-ping # ping tool
apt install net-tools # ifconfig 等网络工具包
apt install openssh-client # ssh 客户端
apt install openssh-server # ssh 服务端
apt install vsftpd # ftp
apt install tzdata # 时区工具,有些镜像不支持yaml文件修改时区