gpt4 book ai didi

mysql - LXD share/var/lib/mysql 从主机到容器并映射用户/组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:21 30 4
gpt4 key购买 nike

将主机系统的 mysql/mariadb 数据目录共享到容器并正确映射权限的正确方法是什么?我已经为此苦苦挣扎了几天。如果之前有人问过这个问题,我很抱歉,但我已经彻底搜索过,但还没有找到解决方案。基本上我到目前为止所做的:

在主机和容器上安装 mariadb-server 并且:

$ printf "lxd:$(id -u mysql):1\nroot:$(id -u mysql):1\n" | sudo tee -a /etc/subuid
$ printf "lxd:$(id -g mysql):1\nroot:$(id -g mysql):1\n" | sudo tee -a /etc/subgid
$ sudo systemctl restart lxd
$ printf "uid $(id -u mysql) 1000\ngid $(id -g mysql) 1000" | lxc config set $CONTAINER_NAME raw.idmap -
$ lxc restart $CONTAINER_NAME
$ sudo lxc config device add $CONTAINER_NAME mysql disk source=/var/lib/mysql path=/var/lib/mysql

不幸的是,这会破坏容器并阻止它启动,因为不允许映射。

$ sudo lxc info --show-log ub1804x64-3

Name: ub1804x64-3
Remote: unix://
Architecture: x86_64
Created: 2018/07/09 15:30 UTC
Status: Stopped
Type: persistent
Profiles: default

Log:

lxc ub1804x64-3 20180709154554.682 ERROR lxc_conf - conf.c:lxc_map_ids:2919 - newuidmap failed to write mapping "newuidmap: uid range [1000-1001) -> [114-115) not allowed": newuidmap 6725 0 100000 1000 1000 114 1 1001 101001 64535
lxc ub1804x64-3 20180709154554.682 ERROR lxc_start - start.c:lxc_spawn:1661 - Failed to set up id mapping.
lxc ub1804x64-3 20180709154554.755 WARN lxc_network - network.c:lxc_delete_network_priv:2607 - Failed to remove interface "veth38DOB9" from "lxdbr0": Invalid argument
lxc ub1804x64-3 20180709154554.755 ERROR lxc_container - lxccontainer.c:wait_on_daemonized_start:834 - Received container state "ABORTING" instead of "RUNNING"
lxc ub1804x64-3 20180709154554.756 ERROR lxc_start - start.c:__lxc_start:1887 - Failed to spawn container "ub1804x64-3"
lxc 20180709154554.775 WARN lxc_commands - commands.c:lxc_cmd_rsp_recv:130 - Connection reset by peer - Failed to receive response for command "get_state"

我基本上是在关注this article ( https://stgraber.org/2017/06/15/custom-user-mappings-in-lxd-containers/ ) 由 Stéphane Graber( super 棒的主要 LXD 开发人员)编写以实现此目的。我承认我不完全理解这里发生了什么,如果有人能帮助我更好地理解我的错误,我将非常感激。我觉得我的范围有误(1000?)。我以前尝试通过手动添加 mysql 用户/组并尝试映射它们(而不是安装 mysql)来做同样的事情,但这也没有成功(同样的错误)。这是我在尝试映射之前尝试过的):

$ sudo groupadd mysql
$ sudo useradd -r -g mysql mysql

我正在使用在主机 Ubuntu 18.04 amd64 上运行的 LXD 3.0.1 并使用 Ubuntu 18.04 amd64 容器进行测试

最佳答案

原来这是一个真正的“新手”问题。我上周才开始使用 LXD,所以我似乎不了解一些基本原则。我现在觉得自己很愚蠢,但是嘿......有时候你就是这样学习的,对吧?

对于遇到此问题的任何其他人...最实用的解决方案是将容器提升为特权容器:

lxc config set cname security.privileged true

之后重启容器。这样您就不需要手动映射用户。一切都应该正常工作。不过,您可能必须在使用前从容器中 chown:

chown -Rv mysql:mysql/var/lib/mysql

当您共享/var/lib/mysql 并在容器中运行数据库服务器时,请注意主机上的任何 mysql/mariadb 服务器都没有运行。否则锁将阻止容器的服务器实例运行。不应尝试破解锁并同时运行服务器,因为这只会破坏数据。

我也不推荐这种方法用于生产。我这样做只是为了简化对我的开发环境的测试,因此数据是可消耗的。我相信还有其他实际用例。这种方法有效地在主机/容器之间共享 mysql 数据目录,但显然在任何给定时间只有一个运行的服务器可以使用数据。

非常感谢 LXD 邮件列表中的 David Favor 提供的帮助。

关于mysql - LXD share/var/lib/mysql 从主机到容器并映射用户/组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com