docker-compose.yml에서 wp cli를 실행하는 방법
이제 막 도커에서 시작했어
그래서 이걸 docker-compose.yml에 넣었어요
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_TABLE_PREFIX: "wp_"
WORDPRESS_DEBUG: 1
wordpress-cli:
depends_on:
- db
- wordpress
image: wordpress:cli
command: wp core install --path="/var/www/html" --url=localhost --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com
volumes:
db_data:
그래서 테스트 워드프레스 사이트를 수동으로 셋업할 필요가 없도록 wp core install을 실행하고 싶었습니다.
그러나 도커 컴포즈업을 실행하면 작동하지 않는 것 같습니다.콘솔에 이 에러가 표시됩니다.
내가 뭘 놓쳤지?워드프레스 설치 자동화를 목표로 하고 있는 제 목표를 실현하는 데 도움을 주실 수 있습니까?
잘 부탁드립니다
몇 가지 문제가 있습니다.첫 번째는 이 두 개의 컨테이너(wordpress그리고.wordpress-cli)는 볼륨을 공유하지 않습니다.그래서 그러는 동안wordpress에는 워드프레스 설치가 준비되어 있습니다.wordpress-cliDoesn't.
따라서 두 컨테이너에 볼륨을 추가한 후wordpress-cli워드프레스 설치를 찾습니다.
그리고 두 번째 문제가 있습니다.wordpress:latest그리고.wordpress:cli둘 다 사용자와 함께 실행되는 이미지www-data하지만 문제는 개인은www-data사용자의 사용자 ID가 다릅니다.
$ docker run --rm wordpress:latest grep www-data /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
$ docker run --rm wordpress:cli grep www-data /etc/passwd
www-data:x:82:82:Linux User,,,:/home/www-data:/bin/false
여기에서는 잘 맞지 않는 것 같아요.따라서 공유 볼륨을 사용하는 경우 두 볼륨 모두 동일한 사용자 ID를 사용해야 합니다.이 문제를 해결하려면wordpress:cli사용자와 함께 실행하다xfs사용자 ID 33 이기도 합니다.
마지막 문제는 컨테이너가 서로 종속되어 있다는 것입니다.Wordpress는 MySQL 인스턴스를 실행해야 하며 Wordpress-cli는 MySQL과 Wordpress를 준비해야 합니다.MySQL이 Wordpress cli 설치를 위한 준비가 되었는지 확인하려면 "wait-for-it"과 같은 방법을 사용하거나 간단한 경우 몇 초만 기다렸다가 시도해 보십시오.
모든 변경 사항을 테스트하여 다음과 같은 결과를 얻었습니다.docker-compose.yml. "vstm"에서 변경한 내용은 모두 주석을 달았습니다.
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_TABLE_PREFIX: "wp_"
WORDPRESS_DEBUG: 1
# vstm: add shared volume
volumes:
- wp_data:/var/www/html
wordpress-cli:
depends_on:
- db
- wordpress
image: wordpress:cli
# vstm: This is required to run wordpress-cli with the same
# user-id as wordpress. This way there are no permission problems
# when running the cli
user: xfs
# vstm: The sleep 10 is required so that the command is run after
# mysql is initialized. Depending on your machine this might take
# longer or it can go faster.
command: >
/bin/sh -c '
sleep 10;
wp core install --path="/var/www/html" --url="http://localhost:8000" --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com
'
# vstm: add shared volume
volumes:
- wp_data:/var/www/html
volumes:
db_data:
# vstm: add shared volume
wp_data:
도커 볼륨을 사용하지만 파일 시스템에 매핑할 수도 있습니다.도커 컴포넌트를 어떻게 사용하느냐에 따라 달라집니다.
이건 나한테 효과가 있었어
wpcli:
depends_on:
- mysql
- wordpress
image: wordpress:cli
links:
- mysql:db
entrypoint: wp
command: "--info"
container_name: ${COMPOSE_PROJECT_NAME}_wpcli
volumes:
- ${WORDPRESS_DATA_DIR:-./wordpress}:/var/www/html
working_dir: /var/www/html
다음 행에 주의해 주십시오.
links:
- mysql:db
mysql = my service db의 이름 = 내가 지정한 별칭 이름, 무엇이든 될 수 있습니다.
그런 다음 다음과 같이 실행 wp를 발행합니다.
docker-compose run --rm wpcli WORDPRESS_COMMAND
출처 : https://medium.com/ @httpmz / using-wp-cli-with-docker-21b0ab9g79
Stack Overflow에서의 첫 번째 답변입니다:">
사실 당신의 질문이 저에게 영감을 주었고, @vstm의 답변이 저에게 조금 안내가 되었습니다.
내 코드를 시험해 볼 수 있어
1. 대기시간쉿
#!/bin/bash -e
HOST=$(echo $WORDPRESS_DB_HOST | cut -d: -f1)
PORT=$(echo $WORDPRESS_DB_HOST | cut -d: -f2)
CMD=$@
until mysql -h $HOST -P $PORT -D $WORDPRESS_DB_NAME -u $WORDPRESS_DB_USER -p$WORDPRESS_DB_PASSWORD -e '\q'; do
>&2 echo "Mysql is unavailable - sleeping..."
sleep 2
done
>&2 echo "Mysql is up - executing command"
exec $CMD
2. syslog.yml
version: '3.9'
services:
wordpress:
image: wordpress:5.7.0-php7.4-apache
ports:
- "80:80"
volumes:
- ./wp-data/:/var/www/html/
networks:
wp-net: {}
wp-cli:
image: wordpress:cli-2.4.0-php7.4
depends_on:
- wordpress
volumes:
- ./wait-for-mysql.sh:/wait-for-mysql.sh
- ./wp-data:/var/www/html/ # shared with wordpress service
user: "33"
command: >
/wait-for-mysql.sh
wp core install
--path="/var/www/html"
--url="http://your-url-here"
--title=your-title-here
--admin_user=your-user-here
--admin_password=your-password-here
--admin_email=your-email-here}
--skip-email
networks:
wp-net: {}
networks:
wp-net: {}
참고하시기 바랍니다.
언급URL : https://stackoverflow.com/questions/50999848/how-to-run-wp-cli-in-docker-compose-yml
'programing' 카테고리의 다른 글
| Spring boot application.properties maving multi-module 프로젝트 (0) | 2023.03.10 |
|---|---|
| 메서드 JPQL에 대한 쿼리를 검증하지 못했습니다. (0) | 2023.03.10 |
| ORA-12638: 자격 증명 취득 실패 (0) | 2023.03.05 |
| PHP-FPM 수신 대기열에 의해 사이트에 액세스할 수 없게 되어 CPU가 100%에 도달합니다. (0) | 2023.03.05 |
| "런타임입니다.protractor를 실행할 때 executionContextCreated에 잘못된 '콘텍스트' 오류가 발생함 (0) | 2023.03.05 |
