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
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐