使用Laradock
系统信息:
当我运行docker-compose up -d mysql
时,我收到了错误。以下是docker日志
[注意]基础设置为/ usr /
[警告]语法'--symbolic-links / -s'已弃用,将在以后的版本中删除
[警告]'NO_ZERO_DATE','NO_ZERO_IN_DATE'和'ERROR_FOR_DIVISION_BY_ZERO'sql模式应该与严格模式一起使用。它们将在未来版本中与严格模式合并。
[错误] - 指定了初始化但数据目录中包含文件。中止。
[错误]中止
我试过删除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 <[email protected]>
#####################################
# 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
文件夹后,我收到以下错误。在命令之后,它生成下图中的文件。当我重新运行回复上面提到的上一个错误时。
[注意]基础设置为/ usr /
[警告]语法'--symbolic-links / -s'已弃用,将在以后的版本中删除
[警告]'NO_ZERO_DATE','NO_ZERO_IN_DATE'和'ERROR_FOR_DIVISION_BY_ZERO'sql模式应该与严格模式一起使用。它们将在未来版本中与严格模式合并。
[警告]设置lower_case_table_names = 2,因为/ var / lib / mysql /的文件系统不区分大小写
[警告]您需要使用--log-bin使--log-slave-updates工作。
libnuma:警告:/ sys未挂载或无效。假设有一个节点:没有这样的文件或目录mbind:不允许操作
[错误] InnoDB:文件操作中的操作系统错误号22。
[错误] InnoDB:错误号22表示“无效参数”
[错误] InnoDB:文件./ib_logfile101:'aio write'返回操作系统错误122.无法继续操作
[错误] InnoDB:无法继续运行。
**我尝试在Windows 7机器上工作。
当我从Virtualbox的来宾Debian OS启动容器并在Windows 10上的共享文件夹上创建数据库文件时,当我收到AIO错误时,这就解决了这个问题。
问题似乎是共享文件夹或至少某些版本的Windows不支持AIO。在我的主机崩溃之后,从Windows 10 Pro转移到Home后,似乎已经发生了这种情况。
详情如下:
以下是一些选项:
选项1 - 像这样启动容器:
docker run -it mysql --innodb_use_native_aio=0
选项2 - 将命令添加到docker-compose文件中:
command: --innodb_use_native_aio=0
在上下文中,这是我工作的docker-compose.yml的相关部分:
services:
db:
image: ${MYSQL_IMAGE}
command: "--innodb_use_native_aio=0"
volumes:
- ${DB_DATA_PATH}:/var/lib/mysql
ports:
- ${MYSQL_PORT}:3306
选项3 - 在您的构建中为my.cnf文件添加一个选项
innodb_use_native_aio=0
选项4 - 不要将数据库保留在本地文件系统上。(可以破坏您的数据库,不推荐)
只需删除包含mysql db的docker配置中的卷。当然,如果您使用docker-compose down或以其他方式销毁容器,您的数据库将被删除,所以就是这样。
我的Windows 10企业版遇到了同样的问题,我无法找到完美的解决方案,因为它似乎是我的Windows版本问题 - 我在其他Windows(8和10专业版)上成功运行了相同的图像。我的临时工作是完全从docker-compose文件中删除/ var / lib / mysql mount,允许在容器本身中创建和修改数据库数据文件。
我使用kitematics,它将重新启动并重新附加我创建的容器,我想在容器上工作,就像我在容器退出时不会丢失我的数据。如果你不使用kitematics这就是它的作用。在运行docker-compose之后,将创建图像并创建一个容器来运行它,我避免在创建的图像上使用run,因为这将创建新的容器我坚持按顺序运行
docker ps -a # this command will get container_id of all container, those that are running and those that are not
docker start <container_id> # start container from background
docker attach <container_id> # attach container to standard input
使用这些docker命令,即使退出并重新启动,我的数据也会保留在容器中
现在,每当我想移动数据时,我都会将容器提交到图像中并将图像保存到本地存储
docker commit <container_id> <backup_image_name>:<1_31_2017> # I use date to tag it
docker save -o <local_storage_tar_name> <backup_image_name>
每当我需要在我的计算机上恢复mysql容器或新的编程实习生时
cd <dir_containing_the_tar_file>
docker load -o <local_storage_tar_name>
此解决方案适用于您的更新
File ./ib_logfile101: 'aio write' returned OS error 122. Cannot continue operation
我希望这有助于某人
我不确定但是请尝试这一步。这是因为数据文件夹。
尝试删除泊坞窗图像。使用docker图像列出所有图像,然后使用docker rmi imagename删除mysql和laradock mysql。别忘了使用docker volume rm volumename删除docker卷也转到cd~ / .laradock / data删除mysql文件夹。
然后尝试使用docker-compose up mysql进行调试。如果没有错误,你可以试试docker-compose up -d mysql