3
votes

--allow-root ne fonctionne pas en exécutant wp-cli dans le conteneur docker

Lorsque vous utilisez WP CLI dans le docker, je dois l'exécuter en tant que root. Je dois ajouter le drapeau --allow-root directement dans .bashrc et j'essaie de comprendre pourquoi cela ne fonctionne pas.

Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress installation exists under.

If you REALLY mean to run this as root, we won't stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.

If you'd like to continue as root, please run this again, adding this flag:  --allow-root

If you'd like to run it as the user that this site is under, you can run the following to become the respective user:

    sudo -u USER -i -- wp <command>

mon .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
wp() {
/usr/local/bin/wp "$@" --allow-root
}

lorsque j'essaie d'exécuter une commande wp, j'obtiens cette erreur:

FROM webdevops/php-dev:7.3

# configure postfix to use mailhog
RUN postconf -e "relayhost = mail:1025"

# install wp cli
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
    chmod +x wp-cli.phar && \
    mv wp-cli.phar /usr/local/bin/wp && \
    echo 'wp() {' >> ~/.bashrc && \
    echo '/usr/local/bin/wp "$@" --allow-root' >> ~/.bashrc && \
    echo '}' >> ~/.bashrc

WORKDIR /var/www/html/

Il semble que cette ligne de commande ne considère pas ce que je saisis dans .bashrc

Les gars, avez-vous des suggestions pour résoudre ce problème?


2 commentaires

Non, j'utilise Docker Desktop pour le développement local.


Comment exécutez-vous les commandes wp? Exécutez-vous bash en premier?


3 Réponses :


-1
votes

Le problème est que ~/.bashrc ne provient pas. Il ne proviendra que d'un shell Bash interactif.

Vous pourriez obtenir de meilleurs résultats en le faisant via des exécutables. Quelque chose comme ça:

# install wp cli
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
    chmod +x wp-cli.phar && \
    mv wp-cli.phar /usr/local/bin/wp-cli.phar && \
    echo '#!/bin/sh' >> /usr/local/bin/wp && \
    echo 'wp-cli.phar "$@" --allow-root' >> /usr/local/bin/wp && \
    chmod +x /usr/local/bin/wp


2 commentaires

l'exécution de cela a entraîné une PHP Fatal error: Uncaught PharException: phar "/usr/local/bin/wp" has a broken signature in /usr/local/bin/wp:3


J'ai juste fait un test pour voir si j'avais le même problème, malheureusement pas. Il semble que wp-cli.phar se soit retrouvé dans /usr/local/bin/wp au lieu du script shell. Cela aurait-il pu arriver?



4
votes

Vous êtes aux prises avec l'énigme classique: qu'est-ce qui se passe dans bashrc et quoi dans bash_profile et lequel est chargé quand?

La version extrêmement courte est:

$HOME/.bash_profile : lu aux shells de connexion. Doit toujours source $HOME/.bashrc . Ne doit contenir que des variables d'environnement pouvant être transmises à d'autres fonctions.

$HOME/.bashrc : lecture seule pour les shells interactifs qui ne sont pas connectés (ex. Ouverture d'un terminal dans X). Ne doit contenir que des alias et des fonctions

Comment cela aide-t-il le PO?

L'OP exécute la ligne suivante:

# .bash_profile
if [ -n "$BASH" ] && [ -r ~/.bashrc ]; then
    . ~/.bashrc
fi

Le drapeau -i de la commande sudo lance un login-shell

-i, --login : -i, --login le shell spécifié par l'entrée de la base de données de mots de passe de l'utilisateur cible comme shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile , .bash_profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté.

Ainsi, l'OP lance un login-shell qui ne lit que le .bash_profile . La façon de résoudre le problème est maintenant de .bashrc fichier .bashrc là-dedans, comme cela est fortement recommandé .

$ sudo -u USER -i -- wp <command>

plus d'informations sur les fichiers dot:

Articles Similaires:


0 commentaires

0
votes

J'ai récemment eu le même problème. Dans mon Dockerfile, j'exécutais:

RUN wp core download --allow-root && wp plugin install woocommerce --activate --allow-root

J'ai regardé le message d'erreur et j'ai pensé que de la façon dont il était formulé, le --allow-root est ignoré la première fois que vous l'utilisez. Je l'ai donc ajouté à la première commande wp , et cela a fonctionné.

RUN wp core download && wp plugin install woocommerce --activate --allow-root


0 commentaires