通过群集模式,容器可以部署在任何已加入的节点上。我在host1上创建了一个共享的nfs文件夹作为mysql数据文件夹。
mkdir -p /nfs/data-volume
在另一个host2上,它挂载到这个共享文件夹。并添加了必要的权限。我尝试通过读写其中的一些文本文件来使用这个nfs共享文件夹。它非常有效。(没有权限错误) 在完成了这些nfs配置之后,我像这样定义了我的容器卷;
mysqldb-read:
image: demo/db-slave
ports:
- "3308:3306"
volumes:
- /nfs/data-volume:/var/lib/mysql
结果如下: 如果mysql容器运行在host1上,表现非常良好。 如果mysql容器运行在host2上,则无法启动。但是容器不会退出,线程仍然存在,似乎在等待某些内容。 通过运行检查日志命令:
docker logs -f mymysql
它显示的日志如下所示:
2017-06-07T02:40:13.627195Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-06-07T02:40:13.632313Z 0 [Note] mysqld (mysqld 5.7.18-log) starting as process 52 ...
2017-06-07T02:40:13.648010Z 0 [Note] InnoDB: PUNCH HOLE support available
2017-06-07T02:40:13.648054Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-06-07T02:40:13.648059Z 0 [Note] InnoDB: Uses event mutexes
2017-06-07T02:40:13.648062Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2017-06-07T02:40:13.648066Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-06-07T02:40:13.648069Z 0 [Note] InnoDB: Using Linux native AIO
2017-06-07T02:40:13.648326Z 0 [Note] InnoDB: Number of pools: 1
2017-06-07T02:40:13.648770Z 0 [Note] InnoDB: Using CPU crc32 instructions
2017-06-07T02:40:13.651011Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2017-06-07T02:40:13.760444Z 0 [Note] InnoDB: Completed initialization of buffer pool
2017-06-07T02:40:13.829981Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
这个日志没有更多的内容了,它停在这一行。 我尝试登录到容器,并输入命令
mysqld -uroot -proot
显示的日志完全相同。我觉得这是由nfs引起的。但我搜索了一下,发现几乎所有的资料都建议使用nfs来共享数据。有没有人成功地做到了这一点?或者对我有什么建议?
谢谢
mysqld -uroot -proot
是不正确的。你应该执行mysql
(客户端)而不是mysqld
(服务器)。 - Robert