39

我们正在使用Docker for mysql,运行时遇到以下错误

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.

现在我们需要在mysqlmax_allowed_packet配置中增加大小,任何人都可以在 docker 命令上帮助我增加。max_allowed_packet

4

3 回答 3

85

作为容器命令的参数:

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

请参阅https://hub.docker.com/_/mysql/上的“没有 cnf 文件的配置” ,此处复制以供后代使用:

没有 cnf 文件的配置 许多配置选项可以作为标志传递给 mysqld。这将使您可以灵活地自定义容器,而无需 cnf 文件。例如,如果要将所有表的默认编码和排序规则更改为使用 UTF-8 (utf8mb4),只需运行以下命令:

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

如果您想查看可用选项的完整列表,只需运行:

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

使用时docker-compose(如评论中所述),添加一个command带有参数的键:

版本:“3”
服务:
  数据:
    图片:“mysql:5.7.20”
    command: --max_allowed_pa​​cket=32505856 # 将 max_allowed_pa​​cket 设置为 256M(或任何其他值)
    环境:
      - MYSQL_ROOT_PASSWORD=密码
      - MYSQL_DATABASE=db
      - MYSQL_USER=用户
      - MYSQL_PASSWORD=user_password
于 2017-03-02T02:02:12.107 回答
20

使用时docker-compose(如评论中所要求的),添加一个command带有参数的键,例如:

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

虽然这适用于 MySQL docker 映像,但它可能无法适用于所有情况,因为它会覆盖默认命令。

更多信息:Docker Compose - 命令

于 2018-01-18T17:36:25.137 回答
4

我认为你应该像这样在你的 Dockerfile 中修改它:

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

于 2016-09-07T12:28:27.157 回答