我有以下docker-compose文件:

version: '2'

networks:
  default:
    driver: bridge

services:

  yii2-app:
    build:
      context: .
      dockerfile: ./Dockerfile-app
    ports:
      - "80:80"
    networks:
      - default
    depends_on:
      - yii2-db
    volumes:
      - "./app:/var/www/app"
      - "./nginx:/etc/nginx/sites-available"
    ...



FROM richarvey/nginx-php-fpm

ADD app /var/www/app

RUN rm -Rf /etc/nginx/sites-enabled/*

ADD nginx/site.conf /etc/nginx/sites-available/site.conf

RUN ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf

RUN cd /var/www/app && \
    composer install

RUN cd /var/www/app && chmod +x yii && \
    cd web && mkdir -p uploads && \
    cd /var/www && chown nginx:nginx -R app/


我的最后一个命令RUN无效:chown不会设置nginx文件的所有者。也不会创建文件夹“上载”。

当我运行docker-compose build --no-cache时,该步骤已通过:

Step 7/7 : RUN cd /var/www/app && chmod +x yii &&     cd web && mkdir -p uploads &&     cd /var/www && chown nginx:nginx -R app/
 ---> Running in 26a918bece47
Removing intermediate container 26a918bece47
 ---> 00db026a461c
Successfully built 00db026a461c
Successfully tagged passport-app_yii2-app:latest


但是,当我运行使用docker-compose up -d以“常见”方式进行的工作负载未应用更改。

为什么我的上一个RUN命令不起作用?

评论

我认为您可以尝试通过逐个执行它们来调试这些语句,看看是否存在问题。

@ profesor79似乎在Docker中我无法在/ var / www / app中创建文件(文件夹,制作文件),因为它的体积很大。

#1 楼

我找到了问题的原因。在Docker中,“ Dockerfile中VOLUME指令之后的任何内容都将无法对该卷进行更改”。
我定义了卷“ ./app:/var/www/app”,然后对其进行操作,因此它不起作用。

#2 楼

生成映像时,您的mkdir和chown命令处于RUN状态,然后从VOLUME挂载/var/www/app,因此您要用外部./app的内容替换创建和chown的文件夹(因此,好像chown无法正常工作)。

如果要在装入卷之后对它的内容进行整理,则应将这些指令放在称为CMD的脚本上。