9
votes

Docker et MySQL: libz.so.1: impossible d'ouvrir le fichier d'objet partagé: autorisation refusée

Lors de l'exécution de MySQLD dans ce dockerfile (sur ma boîte Linux, Linux 12.04)

DockerFile: P>

$ ls -ld /lib
drwxr-xr-x 12 root root 4096 Dec 16 13:42 /lib

$ ls -ld /lib/x86_64-linux-gnu
drwxr-xr-x 3 root root 4096 Mar 17 13:39 /lib/x86_64-linux-gnu  


13 commentaires

Quelles sont les autorisations de libz.so.1 ? Veuillez inclure la sortie de ls -l /path/to/libz.so.1 dans votre question.


Merci, a mis à jour la question avec les autorisations.


Les autorisations de libz.so.1 vont bien. Vous pouvez essayer strace -o /tmp/mysql.strace commande-to-start-mysql , et ce /tmp/mysql.strace peut vous donner les indices pourquoi MySQL ne peut pas ouvrir cette bibliothèque.


Exécutez-vous MySQL avec l'option privilégiée ??


Même question ici Github.com/dotcloud/docker/issues/4704


Merci pour votre commentaire. Cette trace indique également que la libz.so.1 donne une permission refusée. J'ai mis à jour la question avec la sortie.


@Rahul r Dhobi: Nope, je ne suis pas en mode privilégié et oui, j'ai ajouté que comme un problème pour le dotcloud, mais ils l'ont refermé même s'il n'est pas encore réparé (pour moi au moins).


@jakobht Quelle est la sortie de ls -ld / lib et ls -ld / lib / x86_4-linux-gnu , votre MySQL ne peut pas accéder à ces deux répertoires.


@leeduhem, j'ai essayé vos commandes, mais les deux bibliothèques ont lu et exécutent des autorisations pour autres (mises à jour la question avec la sortie). Le désordre de conteneur de docker peut-il contenir des autorisations?


Cela pourrait être lié à Docker Numéro # 783 . Si vous pouvez essayer de basculer sur les registres de stockage DeviceMapper ou BTRFS pour réessayer, ce serait génial. En outre, si vous pouvez fournir un dockerfile complet (que tout le monde peut simplement construire + courir pour reproduire le problème), ce serait très utile! Merci!


@jpetazzo, merci beaucoup! Votre idée en passant au pilote DeviceMapper (n'a pas essayé BTRFS) la résolvait. Pourriez-vous s'il vous plaît ajouter une réponse.


GitHub Problèmes: Github.com/orchardup/docker-mysql/issues/5 Github.com/dotcloud/docker/issues/4704 github.com/dotcloud/docker/issues/783 GITUB.COM/TUTUMCLOUD/TUTUM-DOCKER-MYSQL/issues/5


Je dois ajouter cela, puisque je suis confronté au même problème. Je l'ai résolu un peu d'une manière différente. Donc, ce que j'ai fait est: exécuter apt-get update && apt-get install -y lib32z1 . Je dois mentionner que j'utilise des cultures / Poky: Ubuntu-16.04.


4 Réponses :


0
votes

essayer de
sudo apt-obtenir la mise à jour de
sudo apt-get install -y mysql-serveur


2 commentaires

Comme indiqué sur github.com/dotcloud/docker/issues/4704 , il a déjà essayé Cela et ça n'a pas fonctionné ... mentionner des sources est toujours une bonne idée.


Comme mentionné, j'ai déjà essayé cela et que le dockerfile exécute également la mise à jour APT-GET. Sortie de $ chat /etc/apt/sources.list est deb archive.ubuntu.com/ubuntu précise Main, si c'est ce que vous entendez par des sources?



5
votes

J'ai donc résolu le problème en utilisant le backend de stockage DeviceMapper, comme suggéré par @jpetazzo.

Étapes I effectuées:

  1. arrêté le docker damon
  2. a commencé le docker dockon avec commande docker -d -s = "deviceMapper"
  3. a exécuté le docker exécuter sur la commande dockerfile à nouveau. Et cela a fonctionné sans aucun problème.

1 commentaires

Le backend BTRFS est bon pour surmonter ce problème aussi. Assurez-vous simplement / var / lib / docker est sur un volume BTRFS, et il est automatiquement utilisé.



9
votes

Supprimer le conteneur résolvez ce problème pour moi.

update : cette solution n'a pas été aussi longue.

donc j'ai continué à rechercher et à trouver Quelque chose lié à Apparmor .

Si vous avez installé MySQL sur votre hôte, L'APPARMOR peut limiter l'accès de cette bibliothèque partagée pour MySQL installé sur votre conteneur Docker. Les suivants corrigent le problème: xxx


0 commentaires

3
votes

Si vous avez installé MySQL-Server sur votre machine hôte, il installe un profil AparMor pour MySQLD. Pour moi, le problème est parti après avoir désactivé le profil MySQLD APPARMOR sur l'hôte avec les commandes suivantes:

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Bien sûr, cela signifie également qu'Apparmor sera désactivé pour MySQLD sur votre hôte. Je n'utilise pas mysqld donc je vais bien avec ça.


0 commentaires