如何在DDEV的website容器中创建SFTP用户以实现api容器访问?
在DDEV的website容器中创建SFTP用户并实现跨容器访问
可行性说明
可以在DDEV的website容器中创建SFTP用户,因为DDEV容器基于Debian/Ubuntu镜像,支持安装和配置SFTP服务,且两个容器通过路由器连接,可通过容器名或内部IP互相访问。
具体操作步骤
1. 进入website容器
使用DDEV命令进入目标容器:
ddev exec -s web --container-name=ddev-website-web bash
2. 安装SFTP服务依赖
在容器内安装openssh-server:
apt update && apt install -y openssh-server
3. 创建SFTP专用用户和目录
- 创建用户(示例用户名为
sftp_user),指定其登录shell为/usr/sbin/nologin(禁止SSH登录,仅允许SFTP):
useradd -m -d /var/www/html -s /usr/sbin/nologin sftp_user
- 设置用户密码:
passwd sftp_user
(输入两次密码完成设置即可)
4. 配置SSH服务以支持SFTP
编辑/etc/ssh/sshd_config文件,替换原有SFTP配置并添加专用规则:
sed -i 's/Subsystem sftp/#Subsystem sftp/g' /etc/ssh/sshd_config echo -e "\nSubsystem sftp internal-sftp\nMatch User sftp_user\n ForceCommand internal-sftp\n PasswordAuthentication yes\n ChrootDirectory /var/www/html\n PermitTunnel no\n AllowAgentForwarding no\n AllowTcpForwarding no\n X11Forwarding no" >> /etc/ssh/sshd_config
5. 调整目录权限(关键)
SFTP的Chroot目录需满足特定权限要求:
chown root:root /var/www/html chmod 755 /var/www/html
如果需要让用户能写入特定子目录(比如files),可创建并调整权限:
mkdir -p /var/www/html/files chown sftp_user:sftp_user /var/www/html/files chmod 775 /var/www/html/files
6. 重启SSH服务
service ssh restart
7. 从api容器测试SFTP连接
进入api容器:
ddev exec -s web --container-name=ddev-api-web bash
安装SFTP客户端(若容器未预装):
apt update && apt install -y ftp
连接website容器(容器名ddev-website-web,端口22):
sftp sftp_user@ddev-website-web
输入之前设置的密码即可登录,之后可执行文件传输操作。
注意事项
- DDEV容器重启后,安装的openssh-server和创建的用户会丢失,若需持久化配置,可通过DDEV的
docker-compose.*.yaml自定义配置,或使用DDEV的hooks机制在容器启动时自动执行安装和配置命令。 - 确保两个容器处于同一DDEV项目网络中,默认DDEV为每个项目创建独立网络,若需跨项目互通,可通过
ddev config global --router-compose-path配置共享网络,或手动将容器加入同一网络。
内容的提问来源于stack exchange,提问作者ara
相关产品推荐
相关产品推荐

