我在 Ubuntu 16.04 上使用 Docker CE,使用 ZFS 作为 Docker 的存储。设置非常标准:
/var/lib/docker
。大部分时间一切正常。但是,有时当我的 VM 启动时,zpool 无法挂载。我相信(虽然我不是 100% 确定)这是因为 Docker 服务在 ZFS 文件系统安装之前启动,实际上我看到/var/lib/docker
在根 FS 上创建了一个文件夹。
如何确保在挂载所有 ZFS 文件系统之前 Docker 服务不会启动?
我正在尝试使用 MariaDB 创建 Galera Cluster 的自动部署,在 CoreOS 上的 Docker 容器内运行。
使用的软件: - MariaDB 官方Docker 镜像,版本 10.1.10 - CoreOS 899.5.0,Docker 1.9.1
一切都在 2 个独立的虚拟机上运行:10.2.0.4 和 10.2.0.5
我可以成功启动第一个节点 (10.2.0.4) 并引导集群。
但是,当我启动第二个节点时,我在复制mysql.time_zone_transition_type
和mysql.time_zone_name
表时遇到了很多错误。在那之后,mysqld
守护进程不会崩溃,所以我的 Docker 容器继续运行(它运行了几分钟没有问题),但它似乎没有加入集群(查询第一个节点上的状态显示只有 1 个节点已加入)和它不接受任何连接(尝试连接到该节点失败)。然而,奇怪的是,如果我重新启动 Docker 容器(保留数据文件夹),它就会加入节点并完美运行。
这是 MySQL 配置文件(添加到/etc/mysql/conf.d
Docker 容器中):
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Galera-related settings
#
[galera]
# Mandatory …
Run Code Online (Sandbox Code Playgroud) 我正在设置一个 CentOS 7 服务器,其中的/home
目录必须位于另一个分区上,然后使用绑定挂载进行挂载。所以:/data/homes
应该绑定安装到/home
.
问题在于确保正确应用 SELinux 上下文。实际上,以下命令具有相互矛盾的结果:
# Applies the rules for /home to all the files
restorecon -R -v /home
# Applies the generic rules (standard files) to all the files
restorecon -R -v /data/homes
Run Code Online (Sandbox Code Playgroud)
如果系统必须重新标记文件,这会导致问题。
为了解决这个问题,我/etc/selinux/targeted/contexts/files/file_contexts.homedirs
通过复制所有规则来修改策略文件/data/homes
:
$ sed -n '/^\/home/p' /etc/selinux/targeted/contexts/files/file_contexts.homedirs \
| sed 's/^\/home/\/data\/homes/' \
>> /etc/selinux/targeted/contexts/files/file_contexts.homedirs
Run Code Online (Sandbox Code Playgroud)
但是,当使用 重新构建策略时semodule -B
,我的更改将丢失。
我知道修改这些文件的推荐方法是使用semanage fcontext
,但我总共需要添加近 200 条规则,并且运行semanage for each
不是一种选择。
如何手动更改文件/etc/selinux/targeted/contexts/files/file_contexts
并确保保留更改?