Etwas neu bei Docker, also bitte haben Sie Geduld mit mir.
HINTERGRUND:
Ich habe die folgenden Container in einem Win 10-Betriebssystem mit WSL2 eingerichtet:
WordPress + MariaDB + PhpMyAdmin + Pure-ftpd
Ich binde meine Projektdateien nicht an mein Betriebssystem, da dies die gesamte Website verlangsamt. Stattdessen verwende ich pure-ftpd, um meine Volumes zu aktualisieren.
Dieses Setup funktioniert großartig! ATM my DB ist etwa 1 GB+, Dateien etwa 500 MB und Uploads etwa 22 GB. *Kuss des Küchenchefs
PROBLEM:
Wenn ich eine Datei mit FTP erstelle, hat diese keine “Schreiben”-Berechtigungen. So wird das Erstellen neuer Skripte unmöglich. Eine Problemumgehung wurde auf das Volume verschoben und die Dateiberechtigung auf „777“ aktualisiert.
pure-ftpd erstellt die Dateien mit dem Benutzer „1000“, aber wenn ich versuche, den Benutzer im Container zu suchen, gibt dies nichts zurück.
Mir fehlt etwas in meiner .YML, damit pure-ftpd als “root” in das Volume “wordpress” schreiben kann
Das ist meine .YML
services:
#DATABASE
db:
container_name: cc_db
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.9-focal
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- cc_db:/var/lib/mysql/****_woo
- ./my_customized.cnf:/etc/mysql/my.cnf
ports:
- "3306:3306" # To Allow Remote Connections
restart: always
environment:
- MYSQL_ROOT_PASSWORD=******++
- MYSQL_DATABASE=******
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
networks:
- cc_network
#PHPMYADMIN
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
environment:
- UPLOAD_LIMIT=768M
- PMA_HOST:db
- PMA_PORT:3306
- PMA_ARBITRARY:1
- MYSQL_ROOT_PASSWORD=******++
restart: always
ports:
- 8080:80
networks:
- cc_network
#WORDPRESS
wordpress:
container_name: cc_wordpress
#image: wordpress:latest
# Current Website: WordPress @ 6.0.2 -- PHP 8.1.10 -- Maria DB 10.6.9 :: Post Max Size: 128 MB , PHP Limit 120 :: Max Inpt Var 4500
image: wordpress:6.0.2-php8.1
ports:
- 80:80
restart: always
networks:
- cc_network
environment:
# our local dev environment
- WORDPRESS_DEBUG:1
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=*****
volumes:
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./httpd/wp-config.php:/var/www/html/wp-config.php
- ./httpd/.htaccess:/var/www/html/.htaccess
- cc_wordpress:/var/www/html/wp-content:rw
ftp:
container_name: ftpd-server
image: stilliard/pure-ftpd:hardened
depends_on:
- wordpress
ports:
- 21:21
- 20:20
- 30000-30009:30000-30009
volumes:
- cc_wordpress:/home/user/:rw
- './ftp/pass:/etc/pure-ftpd/passwd'
environment:
PUBLICHOST: "10.47.61.236"
FTP_USER_NAME: "user"
FTP_USER_PASS: "*****++"
FTP_USER_HOME: "/home/user"
ADDED_FLAGS: "--tls=2"
TLS_CN: "**** FTP"
TLS_ORG: "*****"
TLS_C: "US"
MAX_CONNECTIONS: "20"
restart: always
networks:
- cc_network
networks:
cc_network:
volumes:
cc_wordpress:
cc_db:
Laut dem pure-ftpd
Dokumentation könntest du angeben UID
und GID
des FTP-Benutzers mit den entsprechenden Umgebungsvariablen:
Wenn Sie die einstellen möchten UID
& GID
des FTP-Benutzers verwenden Sie die FTP_USER_UID
& FTP_USER_GID
Umgebungsvariablen.
Die Dokumentation bietet auch eine Beispiel vom Benutzen pure-ftpd
explizit mit WordPress. Es erwähnt:
Im WordPress-Container hat der Eigentümer der Dateien die UID
33
& GID
33
also setzen wir die UID & GID des FTP-Benutzers entsprechend und stellen das folgende Code-Snipplet bereit:
version: "3.2"
services:
web:
image: wordpress:4.8-apache
# other configs for wordpress
volumes:
- ./data/wordpress:/var/www/html
ftp:
# optionally replace username/repo:tag with your name and image details
image: stilliard/pure-ftpd:latest
deploy:
replicas: 1
restart_policy:
condition: on-failure
environment:
PUBLICHOST: xxx.xxx.xxx.xxx
FTP_USER_NAME: "bob"
FTP_USER_PASS: "foobarqux"
FTP_USER_HOME: "/var/www/html"
FTP_USER_UID: 33
FTP_USER_GID: 33
volumes:
- ./data/wordpress:/var/www/html
- ./data/ftp:/etc/ssl/private
ports:
- target: 21
published: 21
protocol: tcp
mode: host
# Bind each passive ports to the host
- target: 30000
published: 30000
protocol: tcp
mode: host
# ...
Bitte versuchen Sie, Ihre zu ändern docker-compose
Datei entsprechend, ich nehme etwas Ähnliches an:
services:
#DATABASE
db:
container_name: cc_db
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.9-focal
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- cc_db:/var/lib/mysql/****_woo
- ./my_customized.cnf:/etc/mysql/my.cnf
ports:
- "3306:3306" # To Allow Remote Connections
restart: always
environment:
- MYSQL_ROOT_PASSWORD=******++
- MYSQL_DATABASE=******
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
networks:
- cc_network
#PHPMYADMIN
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
environment:
- UPLOAD_LIMIT=768M
- PMA_HOST:db
- PMA_PORT:3306
- PMA_ARBITRARY:1
- MYSQL_ROOT_PASSWORD=******++
restart: always
ports:
- 8080:80
networks:
- cc_network
#WORDPRESS
wordpress:
container_name: cc_wordpress
#image: wordpress:latest
# Current Website: WordPress @ 6.0.2 -- PHP 8.1.10 -- Maria DB 10.6.9 :: Post Max Size: 128 MB , PHP Limit 120 :: Max Inpt Var 4500
image: wordpress:6.0.2-php8.1
ports:
- 80:80
restart: always
networks:
- cc_network
environment:
# our local dev environment
- WORDPRESS_DEBUG:1
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=*****
volumes:
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./httpd/wp-config.php:/var/www/html/wp-config.php
- ./httpd/.htaccess:/var/www/html/.htaccess
- cc_wordpress:/var/www/html/wp-content:rw
ftp:
container_name: ftpd-server
image: stilliard/pure-ftpd:hardened
depends_on:
- wordpress
ports:
- 21:21
- 20:20
- 30000-30009:30000-30009
volumes:
- cc_wordpress:/home/user/:rw
- './ftp/pass:/etc/pure-ftpd/passwd'
environment:
PUBLICHOST: "10.47.61.236"
FTP_USER_NAME: "user"
FTP_USER_PASS: "*****++"
FTP_USER_HOME: "/home/user"
FTP_USER_UID: 33
FTP_USER_GID: 33
ADDED_FLAGS: "--tls=2"
TLS_CN: "**** FTP"
TLS_ORG: "*****"
TLS_C: "US"
MAX_CONNECTIONS: "20"
restart: always
networks:
- cc_network
networks:
cc_network:
volumes:
cc_wordpress:
cc_db:
Sie verwenden die wordpress:6.0.2-php8.1
Bild die wiederum darauf basiert php:8.1-apache
. Soweit ich das verstehe von php:8.1-apache
Dockerfile
die müsstest du anpassen FTP_USER_UID
und FTP_USER_GID
Variablen, die mit denen übereinstimmen, die zum Ausführen von Apache verwendet werden, nehme ich an, der Benutzer www-data
, standardmäßig erstellt in Debian-Systeme mit UID
und GID
33
.
Hervorragende Antwort von @jccampanero. Möchte hinzufügen, dass Sie so etwas wie Docker Exec ausführen können pure-pw useradd yourusername -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/youruser
. Auch laut Dokumentation,
Wenn Sie aufgrund der UID oder GID des erstellten Benutzers Probleme mit Volume-Berechtigungen haben, können Sie das Flag -u für die UID ändern, die Sie verwenden möchten, und/oder -g auch mit der Gruppen-ID angeben. Weitere Informationen siehe Ausgabe