使用Docker快速搭建sftp服务
一、安装docker环境
参见 http://www.cnblogs.com/rslai/p/8403350.html
二、从Docker Hub查找sftp镜像
docker search sftp
三、安装sftp - 通过端口转发访问
1、sftp上传文件目录在容器中
docker run --name mysftp -p 2294:22 -d atmoz/sftp foo:pass:::upload
- --name mysftp 容器名称
- foo:pass:::upload 其中foo为用户名,pass为密码,upload为上传的文件会保存到容器里面的/home/foo/upload目录里面
- -p 22:22 将宿主机的22端口映射到容器的22端口,这样方位宿主机的22端口则会转发到容器的22端口上
- -d atmoz/sftp 使用dockup hub中的atmoz/sftp镜像创建容器
通过以上命令构建的sftp容器,用户上传的文件会存放在容器里面中,如果容器删除,则上传文件将会丢失。
查看sftp是否运行
docker ps -a # 查看所有已安装容器 docker ps # 查看运行这的容器
此时就可以使用sftp客户端连接此sftp服务了
docker exec -it e22eb5da1095 /bin/bash # 进入docker容器,这里使用容器名称或CONTAINER ID都可
这个nginx.conf则是上传的文件
2、sftp上传文件目录在宿主机目录
下面的方法可以把本地的文件系统,挂载到容器内,这样上传的文件就会在主机上看到。就算容器被删除了,上传的文件也不会丢失。
docker run --name mysftp20 -v /host/upload:/home/foo/upload --privileged=true -p 2222:22 -d atmoz/sftp foo:pass:1001
- -v /host/upload:/home/foo/upload 其中冒号前边的是宿主机目录,后边的挂载到容器中的目录,如果本地目录/host/uplaod不存在会自动创建
- --privileged=true 由于linux的selinux安全规则所以需要给容器加特权
- 名字也换了一个因为name不能重复,端口也是重复了容器会启动不了
3、创建多用户sftp服务
如果你想给sftp配置多个用户可以有两个方式,1、在容器中创建用户并指派权限,2、在宿主机上编写用户文件然后挂载到容器中
docker run --name mysftp30 -v /host/users.conf:/etc/sftp/users.conf:ro -v /home/sftp:/home --privileged=true -p 3333:22 -d atmoz/sftp
- -v /host/users.conf:/etc/sftp/users.conf:ro 将本地的/host/users.conf映射到容器的/etc/sftp/users.conf,并且在容器内为只读
- -v /home/sftp:/home 将本地/home/sftp目录映射到容器/home下存放上传的文件
创建本地 /host/users.conf文件
vi /host/users.conf
内容如下
foo:123:1001:100 bar:abc:1002:100 baz:xyz:1003:100
其中 user:pass:uid:gid 用户名:密码:用户id:组id
这里创建的用户目录默认组和用户都是root没有权限,需要手动修改一下。
4、查看本地的哪个目录映射到容器使用
#查看目录映射到容器 #docker inspect CONTAINER_ID #docker inspect NAMES docker inspect mysftp30
四、安装sftp - 直接ip访问