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?
3 Réponses :
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
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?
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:
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
Non, j'utilise Docker Desktop pour le développement local.
Comment exécutez-vous les commandes wp? Exécutez-vous bash en premier?