sourcecode

wp-content에 대한 파일 권한을 docker-compose용 공식 워드프레스 이미지로 수정하는 방법

codebag 2023. 4. 3. 21:28
반응형

wp-content에 대한 파일 권한을 docker-compose용 공식 워드프레스 이미지로 수정하는 방법

문제


도커 저장소에서 도커 컴포지트와 공식 워드프레스 이미지를 사용하여 Wordpress 로컬 환경을 설정합니다.

창문에 있어요.

문제는 wp-content에 프리미션 문제가 있어서 Wordpress 관리 패널에서 파일을 업로드할 수 없다는 것입니다.디렉토리를 생성할 수 없는 wordpress 오류

내가 이미 한 일


컨테이너 내의 파일 권한을 확인했더니 다음과 같이 출력되었습니다.

워드프레스 컨테이너에 파일 사용 권한

보다시피, 나의 주인은wp-contentroot대신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.shscript: 원래 이미지가 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 버전 선택 후 웹 서버 매개 변수).

  1. 작성하다docker/wordpress폴더를 선택합니다.
  2. 2개의 미가공 파일(Docker file 및 도커 엔트리 포인트)을 복사합니다.sh) GitHub에서 해당 폴더로 이동합니다.
  3. 도커 엔트리 포인트로 이들 행을 바꿉니다.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

반응형