使用laradock
系统信息:
docker版本:17.10.0-ce,内部版本f4ffd25
操作系统:windows 10主页
当我跑的时候 docker-compose up -d mysql
我犯了个错误。以下是docker日志
[注]basedir设置为/usr/
[警告]语法'--symbolic links/-s'已弃用,将在将来的版本中删除
[警告]“no \u zero \u date”、“no \u zero \u in \u date”和“error \u for \u division \u by \u zero”sql模式应与严格模式一起使用。在将来的版本中,它们将与strict模式合并。
[错误]--指定了初始化,但数据目录中有文件。正在中止。
[错误]正在中止
我试过删除 mysql
文件夹位于 ~/.laradock\data
但没用。
更新1
laradock dockerfile下的mysql容器
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
- ${DATA_SAVE_PATH}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
mysql dockerfile文件
ARG MYSQL_VERSION=8.0
FROM mysql:${MYSQL_VERSION}
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
#####################################
# Set Timezone
#####################################
ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN chown -R mysql:root /var/lib/mysql/
ADD my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld"]
EXPOSE 3306
更新2
在我删除之后 mysql
文件夹位于 ~/.laradock/data
我有以下错误。命令发出后,它会在下面的图像中生成文件。当我重新运行返回前面提到的错误时。
[注]basedir设置为/usr/
[警告]语法'--symbolic links/-s'已弃用,将在将来的版本中删除
[警告]“no \u zero \u date”、“no \u zero \u in \u date”和“error \u for \u division \u by \u zero”sql模式应与严格模式一起使用。在将来的版本中,它们将与strict模式合并。
[警告]设置小写\u case \u table \u names=2,因为/var/lib/mysql/的文件系统不区分大小写
[警告]您需要使用--log bin使--log slave更新生效。
libnuma:警告:/sys未装入或无效。假设一个节点:没有这样的文件或目录mbind:不允许操作
[错误]innodb:文件操作中的操作系统错误号22。
[错误]innodb:错误号22表示“无效参数”
[错误]innodb:file./ib\u logfile101:'aio write'返回操作系统错误122。无法继续操作
[错误]innodb:无法继续操作。
**我在Windows7机器上试过了,它还在工作。
4条答案
按热度按时间6mzjoqzu1#
我的windows10enterprise也有同样的问题,我找不到完美的解决方案,因为这似乎是我的windows版本问题-我在其他windows(8&10professional)上成功运行了相同的映像。我的临时工作是完全从docker compose文件中删除/var/lib/mysql挂载,从而允许在容器中创建和修改数据库数据文件。
我使用kitematics,它可以在任何时候重新启动并重新连接我创建的容器,就像在容器退出时我不会丢失数据一样。如果你不使用kitematics,这就是它的用途。在运行docker compose之后,将创建一个映像并创建一个容器来运行它,我避免在创建的映像上使用run,因为这将创建一个新的容器,我坚持按顺序运行以下命令
通过这些docker命令,即使在退出和重新启动后,我的数据也被保存在容器中
备份
现在,每当我想移动数据时,我都会将容器提交到一个映像中,并将映像保存到本地存储中
还原
每当我需要恢复mysql容器在我的电脑上或一个新的编程实习生
此解决方案供您更新
我希望这对别人有帮助
u1ehiz5o2#
除了上述andrewd的响应之外,您还应该更改
my.cnf
这样在启动时就不会被忽略。你可以运行下面的命令,在跑步前做这个
docker-compose up -d
bwitn5fc3#
禁用aio
当我从virtualbox的guest debian操作系统启动一个容器并在windows10的共享文件夹中创建数据库文件时,这为我修复了aio错误。
问题似乎是,aio在共享文件夹上不受支持,或者至少在某些版本的windows上不受支持。这似乎发生在我从windows10pro搬回家后,我的主机崩溃了。
详情:
全部
在mysql中为zfs禁用aio
以下是一些选项:
选项1-按如下方式启动容器:
选项2-将命令添加到docker compose文件:
在上下文中,这是我的工作docker-compose.yml的相关部分:
选项3——在构建中向my.cnf文件添加一个选项
选项4-不要在本地文件系统上保存数据库。(可能会破坏数据库,不推荐)
只需删除docker配置中包含mysql db的卷。当然,如果你做了一个docker组装或者破坏了你的容器,你的db会被删除,所以就这样。
g52tjvyc4#
我不确定,但尝试此步骤。这是因为数据文件夹。
尝试删除docker图像。使用docker images列出所有图像,然后使用docker rmi imagename删除mysql和laradock mysql。别忘了用docker volume rm volumename删除docker卷也转到cd~/.laradock/data删除mysql文件夹。
然后尝试docker编写mysql进行调试。如果没有错误,您可以尝试docker compose up-d mysql