LXD 공유 /var/lib/mysql을 호스트에서 컨테이너로 공유하고 사용자/그룹을 매핑합니다.
호스트 시스템의 mysql/mariadb data dir를 컨테이너에 공유하고 사용 권한을 올바르게 매핑하는 올바른 방법은 무엇입니까?저는 이것 때문에 며칠 동안 고생하고 있습니다.이런 질문이 이전에 있었다면 죄송합니다만, 제가 꼼꼼히 찾아봤는데 아직 해결책을 찾지 못했습니다.기본적으로 지금까지 제가 해온 일은 다음과 같습니다.
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"
저는 이를 달성하기 위해 기본적으로 Stéphane Graber(최고의 1차 LXD 개발자)가 작성한 이 기사(https://stgraber.org/2017/06/15/custom-user-mappings-in-lxd-containers/) 를 따르고 있습니다.제가 여기서 무슨 일이 일어나고 있는지 완전히 이해하지 못한다는 것을 인정하겠습니다. 누군가가 제 실수를 좀 더 잘 이해할 수 있도록 도와준다면 정말 감사하겠습니다.범위(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 -Rv mysql:mysql /var/lib/mysql
/var/lib/mysql을 공유하고 컨테이너에서 데이터베이스 서버를 실행할 때 호스트 시스템의 모든 mysql/mariadb 서버가 실행되지 않도록 주의해야 합니다.그렇지 않으면 잠금으로 인해 컨테이너의 서버 인스턴스가 실행되지 않습니다.잠금을 해제하고 서버를 동시에 실행하면 데이터가 손상되므로 시도해서는 안 됩니다.
생산을 위해서도 이 방법을 추천하고 싶지는 않습니다.저는 개발 환경에 대한 테스트를 용이하게 하기 위해 이 작업을 수행하고 있으므로 데이터를 사용하는 것입니다.저는 다른 실용적인 사례들도 있다고 확신합니다.이 방법은 호스트/컨테이너 간에 mysql data dir을 효과적으로 공유하는 데 효과적이지만, 분명히 실행 중인 서버 하나만 언제든지 데이터를 사용할 수 있습니다.
도움을 주신 LXD 메일링 리스트의 David Favor 덕분입니다.
언급URL : https://stackoverflow.com/questions/51249855/lxd-share-var-lib-mysql-from-host-to-container-and-map-user-group
'IT' 카테고리의 다른 글
urlib2HTTP 오류: HTTP 오류 403: 금지됨 (0) | 2023.09.15 |
---|---|
everyauth vs passport.js? (0) | 2023.09.15 |
오류 ""DataFrame' 개체에 '첨부' 속성이 없습니다." (0) | 2023.09.15 |
워드프레스에서 비교할 추가를 만드는 방법? (0) | 2023.09.15 |
Linux 터미널의 클립보드에 파일 내용 복사 (0) | 2023.09.15 |