Adding support for new users cannot be done using the last method, because your initialization script run-vsftpd.sh contains the line echo -e "${FTP_USER}\n${FTP_PASS}" > /etc/vsftpd/virtual_users.txt. Once the Docker container is restarted, it will restore virtual_users.txt.
My understanding is that you need to modify the script to something like echo -e "${FTP_USER1}\n${FTP_PASS1}\n${FTP_USER2}\n${FTP_PASS2}\n${FTP_USER3}\n${FTP_PASS3}" > /etc/vsftpd/virtual_users.txt. I have already tested this locally.
If you really need to execute it inside the container, after execution you need to use docker commit to create a new container, but this approach seems to be against the specifications and the original design intent.
Adding support for new users cannot be done using the last method, because your initialization script run-vsftpd.sh contains the line echo -e "${FTP_USER}\n${FTP_PASS}" > /etc/vsftpd/virtual_users.txt. Once the Docker container is restarted, it will restore virtual_users.txt.
My understanding is that you need to modify the script to something like echo -e "${FTP_USER1}\n${FTP_PASS1}\n${FTP_USER2}\n${FTP_PASS2}\n${FTP_USER3}\n${FTP_PASS3}" > /etc/vsftpd/virtual_users.txt. I have already tested this locally.
If you really need to execute it inside the container, after execution you need to use docker commit to create a new container, but this approach seems to be against the specifications and the original design intent.