1

我正在尝试为 dotcms 站点的开发构建一个 docker-compose 文件。

我的 docker-compose.yml 中有以下内容:

version: "3"
  services:
  dotcms:
    image: openjdk
    command: /app/bin/startup.sh run
    ports:
      - 8080:8080
    volumes:
      - ./:/app
    depends_on:
      - db
  db:
    image: mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0 --lower_case_table_names=1
    volumes:
      - ./db:/var/lib/mysql
    ports:
      - 3308:3306
    environment:
      MYSQL_ROOT_PASSWORD: dotcms
      MYSQL_DATABASE: dotcms
      MYSQL_USER: dotcms
      MYSQL_PASSWORD: dotcms

跑完之后docker-compose up

当我尝试加载时localhost:8080,出现 500 错误。我看了一下,dotcms database有一张桌子叫db_version但是就是这样。不创建其他表。

我曾尝试删除dotcms数据库并重新创建然后docker-compose up再次运行,但我遇到了同样的问题。

我也尝试过删除./db文件夹(mysql数据库的安装卷)并重新运行,同样的问题。

更新

我已经更新了dotcms要运行的容器:command: sh -c "sleep 30 && /app/bin/startup.sh run"

我还添加--general_log=1 --general_log_file=/var/log/mysql/query.logdb command

我删除了本地db文件夹并docker-composer再次运行。

仍然得到相同的结果。以下是日志:

dotcms.log: https://pastebin.com/5WnrarK8
catalina.log: https://pastebin.com/Z3vHbnp2
localhost.log: https://pastebin.com/S2CSPqxQ

db容器

mysql.error.log : https://pastebin.com/4bYwB2Z2
mysql.query.log: https://pastebin.com/maDUXFm5
(这个查询文件非常大,我在第一个条目显示之前删除了所有内容:mysql-connector-java-5.1.37

docker logs <container id>
db.container.log:https
://pastebin.com/Wz7aRhVc dotcms.container.log:https ://pastebin.com/qNVBfTpf

4

2 回答 2

1

我不是 mysql 专家,但日志表明这是与 dotCMS 无关的 mysql 问题。这mysql.error.log表明 mysql 在启动后几乎立即关闭 - 这意味着它可能在 dotCMS 有机会访问数据库之前关闭,从而导致 dotCMS 查询失败。

考虑这部分mysql.error.log(您的 pastebin 中的第 38-44 行):

2017-09-19T08:13:37.664410Z 0 [Note] mysqld: ready for connections.
Version: '5.7.19'  socket: '/tmp/tmp.Dlc2I8QgCt/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
2017-09-19T08:13:37.664422Z 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check.
2017-09-19T08:13:37.664430Z 0 [Note] Beginning of list of non-natively partitioned tables
2017-09-19T08:13:37.664491Z 0 [Note] Giving 1 client threads a chance to die gracefully
2017-09-19T08:13:37.664553Z 0 [Note] Shutting down slave threads
2017-09-19T08:13:37.664684Z 3 [ERROR] 1053  Server shutdown in progress

[Note] mysqld: ready for connections消息和消息之间几乎没有时间[ERROR] 1053 Server shutdown in progress。并且 dotcms.log 错误消息中显示的 mysql 查询根本没有显示在 mysql.query.log 中(或者至少在您发布的部分中),表明它从未到达 mysql 数据库。

因此,如果您还没有,我建议您尝试在 Docker 容器中启动 mysql 而不启动 dotCMS,并检查日志以确保它启动并保持没有问题。然后添加 dotCMS 启动,如果这导致 mysql 出现问题,请比较使用和不使用 dotCMS 的 mysql 日志,看看有什么变化。

除此之外,请仔细检查您的 dotCMS context.xml 文件(在 中/dotserver/tomcat-8.0.18/webapps/ROOT/META-INF)以确保您已正确配置以访问 mysql 数据库。

于 2017-09-22T17:13:49.713 回答
0

我遇到了一个不同的错误,但你用参数让我很开心

command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0 --lower_case_table_names=1

我正在尝试 dockerized mysql(5.6、5.7、5.7.29 等),但由于可能与排序规则或表名大小写有关的 SQL 错误,SQL 初始化总是失败。

非常感谢

于 2020-01-22T19:08:12.307 回答