docker部署sftp(创建多级目录&&多容器目录映射共享)

it2024-03-23  62

目录

1、docker部署sftp,多容器映射权限(ro/rw)分配(常用)2、单容器自定义用户根目录3、单容器目录挂载

1、docker部署sftp,多容器映射权限(ro/rw)分配(常用)

1.1、cat docker-compose.yml

version: '2.1' services: sftp: image: atmoz/sftp # 建议作为基础目录结构容器 container_name: sftp restart: always cap_add: - SYS_ADMIN volumes: # 可以将用户存储在配置中,启动容器时自动创建 #- ./leo_users.conf:/etc/sftp/users.conf:ro - ./mySftpVolume:/home command: - tom:123:1001:1001:tom1/test1,tom1/test2,tom2 ports: - "2224:22" leo_sftp: image: atmoz/sftp # 作为基于sftp容器分配ro/rw目录的容器 container_name: leo_sftp restart: always depends_on: - sftp cap_add: - SYS_ADMIN volumes: # 可以将用户存储在配置中,启动容器时自动创建 #- ./leo_users.conf:/etc/sftp/users.conf:ro # 配置对sftp1中tom1/test1只读(ro)权限和tom2读写(rw)权限 - ./mySftpVolume/tom/tom1/test1:/home/leo/tom1/test1:ro - ./mySftpVolume/tom/tom2:/home/leo/tom2 command: # 配置用户和依赖容器中用户UID/GID一致,在没有指定挂载目录为:ro的情况下则具有读写权限。 - leo:123:1001:1001 ports: - "2225:22"

1.2、cat sftp_users.conf

tom:123:1001:1001:tom1/test1,tom1/test2,tom2

1.3、启动

docker-compose up -d [root@test2 complete-sftp]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93e85c8ff41d atmoz/sftp "/entrypoint leo:123…" 16 seconds ago Up 15 seconds 0.0.0.0:2225->22/tcp leo_sftp 6ada9e764874 atmoz/sftp "/entrypoint tom:123…" 17 seconds ago Up 15 seconds 0.0.0.0:2224->22/tcp sftp [root@test2 sftp]# tree mySftpVolume/ mySftpVolume/ └── tom ├── tom1 │ ├── test1 │ └── test2 └── tom2 5 directories, 0 files [root@test2 sftp]#

2、单容器自定义用户根目录

目录结构

[root@test2 sftp]# tree . ├── docker-compose.yml ├── passwd.txt ├── run_user.sh └── sftp_users.conf

2.1、cat docker-compose.yml

version: '2.1' services: sftp: image: atmoz/sftp container_name: sftp cap_add: - SYS_ADMIN volumes: - ./sftp_users.conf:/etc/sftp/users.conf:ro - ./mySftpVolume:/home - ./run_user.sh:/etc/sftp.d/run_user.sh - ./passwd.txt:/tmp/passwd.txt ports: - "2222:22"

2.2、cat sftp_users.conf (必须得有一个用户配置,要不容器无法启动)

#根目录默认在/home/$user/下,多用户无法分配属组的权限 sftp:123:1001:1001:sftp #tom:123:1002:1002:tom,tomm #jerry:123:1003:1003:jerry #leo:123:1004:1004:leo

根目录默认在/home/$user/下,多用户无法分配属组的权限

2.3、cat run_user.sh(通过脚本创建用户指定相同的根目录,以便权限分配使用)

#!/bin/bash # 创建用户a b c d 默认根目录都在home下,多用户可以分配属组的权限 username=(a b c d) for name in ${username[@]} do useradd -d /home $name echo "sftp用户" $name "创建完成" done chpasswd < /tmp/passwd.txt

创建用户a b c d 默认根目录都在home下,多用户可以分配属组的权限 2.4、cat passwd.txt (设置用户的密码文件供批量更新设置密码)

a:123 b:123 c:123 d:123

2.5、启动 docer-compose up -d

3、单容器目录挂载

目录结构:

├── docker-compose.yml ├── sftp_bindmount.sh └── sftp_users.conf

3.1、cat docker-compose.yml

version: '2.1' services: sftp: image: atmoz/sftp container_name: sftp cap_add: - SYS_ADMIN volumes: - ./sftp_users.conf:/etc/sftp/users.conf:ro - ./sftp_bindmount.sh:/etc/sftp.d/bindmount.sh - ./mySftpVolume/sftp:/home ports: - "2222:22"

3.2、cat sftp_users.conf (提供批量创建的用户)

sftp:123:1001:1001:sftp tom:123:1002:1002:tom jerry:123:1003:1003:jerry

3.3、cat sftp_bindmount.sh (绑定sftp用户下的文件夹,到tom/jerry下实现共享)

#!/bin/bash # File mounted as: /etc/sftp.d/bindmount.sh # Just an example (make your own) function bindmount() { if [ -d "$1" ]; then mkdir -p "$2" fi mount --bind $3 "$1" "$2" } # 传参 bindmount /home/sftp/ /home/tom/sftp --read-write bindmount /home/sftp/ /home/jerry/sftp --read-only
最新回复(0)