Docker – 不要删除容器中的已安装文件夹

我想阻止docker在启动后删除容器中存在但不在主机上的文件夹。

我在做什么:

我从我的项目中的所有文件挂载到容器

volumes: - ./:/var/www/html/:rw,delegated 

在我的PHP / Dockerfile中,我正在执行composer install ,以便将我的composer php软件包安装到/vendor 。 供应商文件夹最初不存在于我的主机上。

 RUN composer install 

当我启动容器时,composer将从composer.json / lock文件中安装所有的依赖项。

当我后来连接到容器docker-compose exec php bash ,composer php供应商文件夹丢失。 看起来卷的安装是在容器启动完成之后完成的,由于主机上不存在供应商文件夹,它将从容器中删除。 但是我真正想要实现的是供应商文件夹直接同步回主机,而不是被删除。 这只是我的一个假设,我可能是错的:-)

我怎么能解决这个问题?

编辑:我想通过RUN composer install启动命令实际上执行composer php安装一次容器安装。 这是一个很好的第一步,但通过这样做,我不知道composer php安装完成后,因为它在容器内执行:

 Step 8/9 : CMD composer install ---> Running in 93cb76f2406e ---> 0ce019a1d06c 

compose.yml

 version: '3' services: php: image: $PROJECT_ID/php:$BRANCH build: context: . dockerfile: ./hosting/php/Dockerfile volumes: - ./:/var/www/html/:rw,delegated nginx: image: $PROJECT_ID/nginx:$BRANCH build: context: . dockerfile: ./hosting/nginx/Dockerfile # Used to reference the PHP image args: PROJECT_ID: $PROJECT_ID BRANCH: $BRANCH volumes: - ./docroot:/var/www/html/docroot:rw,delegated varnish: image: wodby/drupal-varnish:4.1 ports: - "80:6081" mariadb: image: wodby/mariadb:10.1-2.3.5 ports: - "3306:3306" memcached: image: wodby/memcached:1.4 mailhog: image: mailhog/mailhog:v1.0.0 

Dockerfile

 FROM wodby/drupal-php:7.1-2.4.9 COPY docroot /var/www/html/docroot/ COPY templates /var/www/html/templates/ COPY build.xml composer.* grumphp.yml phpunit.xml.dist /var/www/html/ # Setup .bashrc RUN touch ~/.bashrc RUN echo "PS1='\w\$ '" >> ~/.bashrc # Install composer dependencies. CMD composer install # Show current folder structure in build logs RUN ls -al -R