docker部署sftp(创建多级目录&&多容器目录映射共享)
目录1、docker部署sftp,多容器映射权限(ro/rw)分配(常用)2、单容器自定义用户根目录3、单容器目录挂载1、docker部署sftp,多容器映射权限(ro/rw)分配(常用)1.1、cat docker-compose.ymlversion: '2.1'services:sftp:image: atmoz/sftp# 建议作为基础目录结构容器container_name: sftpr
·
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
更多推荐
已为社区贡献9条内容
所有评论(0)