使用Docker快速搭建sftp服务

2,258 阅读2分钟

一个系统依赖sftp服务,本地想要部署这个服务的话,就需要一个sftp服务,想到还有啥是Docker做不了的呀?

快速部署

docker run --name sftp -d \
    -p 9022:22 \
    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容器,用户上传的文件会存放在容器里面中,如果容器删除,则上传文件将会丢失。
docker ps -a # 查看所有已安装容器
docker ps # 查看运行这的容器
docker exec -it sftp  /bin/bash # 进入docker容器,这里使用容器名称或CONTAINER ID都可
#查看目录映射到容器
#docker inspect CONTAINER_ID
#docker inspect NAMES
docker inspect mysftp30

测试

sftp -P 9022 foo@localhost

put a.txt

映射目录

docker run --name sftp -d \
    -p 9022:22 \
    -v /opt/docker/sftp/upload:/home/foo \
    --privileged=true \
    atmoz/sftp \
    foo:pass:1001
  • -v /opt/docker/sftp/upload:/home/foo 其中冒号前边的是宿主机目录,后边的挂载到容器中的目录,如果本地目录/opt/docker/sftp/upload不存在会自动创建
  • --privileged=true  由于linux的selinux安全规则所以需要给容器加特权
  • 如果运行多个,则名字也换一个因为name不能重复,端口也是重复了容器会启动不了

多用户

如果你想给sftp配置多个用户可以有两个方式,1、在容器中创建用户并指派权限,2、在宿主机上编写用户文件然后挂载到容器中

docker run --name sftp -d \
    -p 3333:22 \
    -v /host/users.conf:/etc/sftp/users.conf:ro \
    -v /home/sftp:/home  \
    --privileged=true \
    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下存放上传的文件

vi /host/users.conf
foo:123:1001:100
bar:abc:1002:100
baz:xyz:1003:100

其中 user:pass:uid:gid  用户名:密码:用户id:组id