在容器内创建文件权限时丢失

时间:2019-10-12 23:46:18

标签: docker

我已经使用Symfony / PHP,Apache和Mysql堆栈创建了一个docker应用。 当我运行php容器时,我将以root用户身份自动连接。 因此,当我在容器内创建一个新文件时,由于用户root和组root的缘故,该文件被创建为只读模式。 我总是必须更改权限才能在本地编辑它。 我该如何解决该问题?是否可以直接以本地用户身份连接到容器?

我的dockerfile:

FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install zip \
    && docker-php-ext-install mysqli pdo pdo_mysql

RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
   mv composer.phar /usr/local/bin/composer

RUN apt-get install -y git

我的docker-compose文件:

version: "3.7"
services:
        apache:
                container_name: apache
                build: ./docker/apache
                ports:
                        - ${APACHE_PORT}:80
                depends_on:
                        - php
                volumes:
                        - ./docker/apache/httpd.conf:/usr/local/apache2/conf/httpd.conf
                        - .:${PROJECT_DIR}
                        - ./docker/apache/log:/var/log/apache2

        mysql:
                container_name: mysql
                image: mysql
                ports:
                        - ${MYSQL_PORT}:3306
                restart: always
                volumes:
                        - ./docker/data/db:/var/lib/mysql
                command: --default-authentication-plugin=mysql_native_password
                environment:
                        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
                        MYSQL_DATABASE: ${MYSQL_DATABASE}
                        MYSQL_USER: ${MYSQL_USER}
                        MYSQL_PASSWORD: ${MYSQL_PASSWORD}

        phpmyadmin:
                container_name: phpmyadmin
                image: phpmyadmin/phpmyadmin
                links:
                        - mysql:db
                ports:
                        - ${PHPMYADMIN_PORT}:80
                environment:
                        MYSQL_USER: ${PHPMYADMIN_USER}
                        MYSQL_PASSWORD: ${PHPMYADMIN_PASSWORD}
                        MYSQL_ROOT_PASSWORD: ${PHPMYADMIN_ROOT_PASSWORD}

        php:
                container_name: php
                build: ./docker/php
                ports:
                        - ${PHP_PORT}:9000
                links:
                        - mysql
                working_dir: ${PROJECT_DIR}
                volumes:
                        - .:${PROJECT_DIR}

2 个答案:

答案 0 :(得分:0)

向上。

是否可以以我的机器用户而不是root用户身份连接到容器? 默认情况下,它以root用户身份连接:

docker exec -it php bash

这就是更改在容器内创建的文件的权限的原因。

答案 1 :(得分:0)

我终于解决了问题,但不知道这是否是最佳实践。我在docker-compose.yml中添加了几行。

        php:
                container_name: php
                build: ./docker/php
                ports:
                        - ${PHP_PORT}:9000
                links:
                        - mysql
                working_dir: ${PROJECT_DIR}
                volumes:
                        - .:${PROJECT_DIR}
                        - /etc/passwd:/etc/passwd:ro
                        - /etc/group:/etc/group:ro
                user: 1000:1000