augmenter la taille de max_allowed_packet dans le docker mysql

Nous utilisons Docker pour mysql, nous sums confrontés à l’erreur ci-dessous en cours d’exécution

Packet for query is too large (12884616 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12884616 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable. 

Maintenant, nous devons augmenter la taille de max_allowed_packet dans la configuration de mysql . Quelqu’un peut-il m’aider avec la commande docker pour augmenter max_allowed_packet .

Comme argument de la commande container:

 docker run -it -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7 --max-allowed-packet=67108864 

Voir “Configuration sans fichier cnf” sur https://hub.docker.com/_/mysql/ , copié ici pour la postérité:

Configuration sans fichier cnf De nombreuses options de configuration peuvent être transmises sous forme de drapeaux à mysqld. Cela vous donnera la possibilité de personnaliser le conteneur sans avoir besoin d’un fichier cnf. Par exemple, si vous souhaitez modifier l’encodage et le classement par défaut pour que toutes les tables utilisent UTF-8 (utf8mb4), exécutez simplement ce qui suit:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

Si vous souhaitez voir une liste complète des options disponibles, exécutez simplement:

$ docker run -it --rm mysql:tag --verbose --help

Lorsque vous utilisez docker-compose (comme demandé dans les commentaires), ajoutez une clé de command avec les arguments:

 version: "3"
 prestations de service:
   Les données:
     image: "mysql: 5.7.20"
     commande: --max_allowed_packet = 32505856 # Définit max_allowed_packet à 256M (ou toute autre valeur)
     environnement:
       - MYSQL_ROOT_PASSWORD = mot de passe
       - MYSQL_DATABASE = db
       - MYSQL_USER = utilisateur
       - MYSQL_PASSWORD = mot_de_passe_utilisateur

Je pense que vous devriez le modifier dans votre fichier Dockerfile comme ceci:

RUN sed -ire 's/max_allowed_packet.*=.*/max_allowed_packet = YOURVALUE/g' /etc/mysql/my.cnf

Lorsque vous utilisez docker-compose (comme demandé dans les commentaires), ajoutez une clé de command avec les arguments, par exemple:

 version: "3" services: data: image: "mysql:5.7.20" # Set max_allowed_packet to 256M (or any other value) command: --max_allowed_packet=32505856 environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=db - MYSQL_USER=user - MYSQL_PASSWORD=user_password 

Bien que cela fonctionne pour les images du docker de MySQL, cela peut ne pas fonctionner pour tous car cela écrase la commande par défaut.

Plus d’infos: Docker Compose – Command