wp-content에 대한 파일 권한을 docker-compose용 공식 워드프레스 이미지로 수정하는 방법
문제
도커 저장소에서 도커 컴포지트와 공식 워드프레스 이미지를 사용하여 Wordpress 로컬 환경을 설정합니다.
창문에 있어요.
문제는 wp-content에 프리미션 문제가 있어서 Wordpress 관리 패널에서 파일을 업로드할 수 없다는 것입니다.
내가 이미 한 일
컨테이너 내의 파일 권한을 확인했더니 다음과 같이 출력되었습니다.
보다시피, 나의 주인은wp-content
이root
대신www-data
.
즉각적인 해결책은 컨테이너의 배시를 열고
chown -R www-data:www-data /var/www/html/wp-content/
물론 이 방법은 효과가 있지만, 새로운 워드프레스 프로젝트를 시작할 때마다 이 프로세스를 수행하고 싶지는 않습니다.이를 달성하기 위해 저는Dockerfile
다음과 같습니다.
FROM wordpress:5.1.1
# install dos2unix (fix problem between CRLF and LF)
RUN apt-get update
RUN apt-get install -y dos2unix
# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini
# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
그리고 나의entrypoint.sh
다음과 같습니다.
#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
하지만 그제서야 깨달았어요. 내가 이 모든 걸 뒤집고 있다는 걸ENTRYPOINT
원본 워드프레스 이미지의 경우, 용기는 항상 와 함께 종료됩니다.code 0
.
그리고 나서 나는 로 시도했습니다.CMD
대신ENTRYPOINT
, 그리고 나는 내 것을 바꿨다.Dockerfile
다음과 같습니다.
FROM wordpress:5.1.1
# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini
CMD chown -R www-data:www-data /var/www/html/wpcontent/
하지만 파일이나 폴더가 존재하지 않는다는 오류가 항상 발생합니다.
사용하려고 했습니다.CMD
또, 다음과 같습니다.
CMD ["chown", "-R", "www-data:www-data", "/var/www/html/wp-content/"]
하지만 성공하지 못했다.
질문.
원래 명령어 뒤에 명령어를 실행하는 방법이 있습니다.ENTRYPOINT
?
이 문제를 해결할 더 나은 방법을 알고 계십니까?
수정이 가능합니다../entrypoint.sh
script: 원래 이미지가 chown 명령어를 실행한 후 기본 엔트리 포인트스크립트를 실행합니다.
#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
docker-entrypoint.sh apache2-foreground
Docker 문서에서 사용하는 명령어는 다음과 같습니다.RUN
.
RUN과 CMD를 혼동하지 마십시오. RUN은 실제로 명령을 실행하고 결과를 커밋합니다. CMD는 빌드 시 아무 것도 실행하지 않지만 이미지에 사용할 명령을 지정합니다.
따라서 Docker 파일의 행은 다음과 같습니다.RUN chown -R www-data:www-data /var/www/html/wp-content
또한 생성되는 레이어의 수와 이미지의 크기를 줄이기 위해, 나는 많은 레이어들을 체인으로 묶을 것이다.RUN
명령어를 입력합니다.예: (테스트되지 않음)
FROM wordpress:5.1.1
# install dos2unix (fix problem between CRLF and LF) and increase upload limit
RUN apt-get update -y && \
apt-get install -y dos2unix && \
touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini && \
chown -R www-data:www-data /var/www/html/wp-content
# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh && \
chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
문제
부모docker-entrypoint.sh
의 뒤를 쫓는다.Dockerfile
그리고.entrypoint.sh
사용자가 설정한 권한을 덮어씁니다.
솔루션
다음 시간 이후에 소유권을 설정하는 지연된 명령을 실행하는 사용자 지정 진입점docker-entrypoint.sh
가 실행되었습니다.
도커 파일
FROM wordpress:php7.4-apache
[...]
ENTRYPOINT ["/entrypoint.sh"]
입문점쉿
# In 10 seconds set the ownership
$(sleep 10 && chown -R www-data:www-data /var/www/html/) &
# Run the parent's ENTRYPOINT and CMD as defined in its Dockerfile
# (https://github.com/gsusI/wordpress/blob/master/php7.4/apache/Dockerfile)
docker-entrypoint.sh apache2-foreground # run parent entrypoint.
주의: 부모 ENTERPOINT 및 CMD를 수동으로 호출하면 부모 Docker 파일이 마지막 두 줄을 변경하면 이 솔루션이 제대로 작동하지 않을 수 있습니다.
을 할 때는 을 갱신하는 것이 .
FROM
부모의 Docker 파일을 체크하여 마지막 두 줄이 아직 남아 있는지 확인합니다.ENTRYPOINT ["docker-entrypoint.sh"] CMD ["apache2-foreground"]
이는 WordPress Docker 이미지가 생성되는 방식 때문입니다.
Pull Request를 생성하여wp-content
는 「」에 있습니다.www-data
볼륨을 사용하여 공유되는 경우(또는 일부 하위 폴더)
병합하기 전에 WordPress Docker 이미지를 생성하여 변경 내용을 통합할 수 있습니다.https://github.com/docker-library/wordpress 폴더 중 하나를 선택합니다(PHP 버전 선택 후 웹 서버 매개 변수).
- 작성하다
docker/wordpress
폴더를 선택합니다. - 2개의 미가공 파일(Docker file 및 도커 엔트리 포인트)을 복사합니다.sh) GitHub에서 해당 폴더로 이동합니다.
- 도커 엔트리 포인트로 이들 행을 바꿉니다.sh:
if [ "$(id -u)" = '0' ] && [ "$(stat -c '%u:%g' .)" = '0:0' ]; then
chown "$user:$group" .
fi
기준:
if [ "$(id -u)" = '0' ]; then
chown -R "$user:$group" .
fi
언급URL : https://stackoverflow.com/questions/55747066/how-to-fix-file-permissions-on-wp-content-with-official-wordpress-image-for-dock
'sourcecode' 카테고리의 다른 글
JSON으로서의 OkHttp Post Body (0) | 2023.04.03 |
---|---|
객체 속성 액세스를 위한 선택적 체인 연산자 사용 (0) | 2023.04.03 |
AngularJS : 공장 대신 서비스를 사용하는 경우 (0) | 2023.04.03 |
정수가 선행 0으로 시작하는 경우 JSON이 유효하지 않은 이유는 무엇입니까? (0) | 2023.04.03 |
이 "주의: 요청이 아직 크롬으로 완료되지 않았습니다"를 해결하는 방법 (0) | 2023.04.03 |