docker-compose删除共享卷

我有这个LEMP堆栈:

cadvisor: image: google/cadvisor:latest container_name: lemp_cadvisor ports: - "8080:8080" volumes: - "/:/rootfs:ro" - "/var/run:/var/run:rw" - "/sys:/sys:ro" - "/var/lib/docker/:/var/lib/docker:ro" base: build: ./base container_name: lemp_base volumes: - /home/core/server-lemp/www:/var/www:rw phpmyadmin: build: ./phpmyadmin container_name: lemp_phpmyadmin volumes_from: - base volumes: - /var/www/phpmyadmin - ./phpmyadmin/var/www/phpmyadmin/config.inc.php:/var/www/phpmyadmin/config.inc.php:rw ffmpeg: build: ./ffmpeg container_name: lemp_ffmpeg volumes_from: - phpmyadmin volumes: - /usr/ffmpeg mariadb: build: ./mariadb container_name: lemp_mariadb environment: - MYSQL_ROOT_PASSWORD=your-pwd volumes_from: - ffmpeg volumes: - /var/run/mysqld - /home/core/server-lemp/mariadb:/var/lib/mysql:rw - ./mariadb/etc/mysql/my.cnf:/etc/mysql/my.cnf:ro php: build: ./php container_name: lemp_php volumes_from: - mariadb volumes: - /var/run/php-fpm - ./php/usr/local/php7/etc/php-fpm.conf:/usr/local/php7/etc/php-fpm.conf:ro - ./php/usr/local/php7/etc/php.ini:/usr/local/php7/etc/php.ini:ro - ./php/usr/local/php7/etc/php-fpm.d/www.conf:/usr/local/php7/etc/php-fpm.d/www.conf:ro - ./php/etc/supervisor/conf.d/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf:ro - ./php/etc/cron.d:/etc/cron.d:ro nginx: build: ./nginx container_name: lemp_nginx net: "host" ports: - "80:80" - "443:443" volumes_from: - php volumes: - /var/cache/nginx - ./nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

当我启动这个堆栈时,每个文件都将在我的主机上的/home/core/server-lemp/www上被删除,共享给/var/www

在过去这并没有发生,新的命令是唯一的net: "host" Nginx下的net: "host"

这是我的docker-compose日志的样子:

 Jan 18 22:10:14 core-1 docker-compose[11563]: Going to remove lemp_nginx, lemp_php, lemp_mariadb, lemp_ffmpeg, lemp_phpmyadmin, lemp_base, lemp_cadvisor Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_nginx ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_php ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_mariadb ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_ffmpeg ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_phpmyadmin ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_base ... Jan 18 22:10:14 core-1 docker-compose[11563]: Removing lemp_cadvisor ... --> The deletion happening somewhere here Jan 18 22:10:16 core-1 docker-compose[11563]: [303B blob data] Jan 18 22:10:16 core-1 docker-compose[11563]: ERROR: for lemp_mariadb Driver overlay failed to remove root filesystem 3f35133e0814235cc4b9814606798f50d22e472d415ca814beb3443df8b89e3c: remove /var/lib/docker/overlay/3f35133e0814235cc4b9814606798f50d22e472d415ca814beb3443df8b89e3c/merged/var/www/phpmyadmin: device or resource busy Jan 18 22:10:17 core-1 docker-compose[11579]: Creating lemp_cadvisor 

更新:

这里是我的基础Dockerfile:

 # Lanti/lempBase # # VERSION 1.0.0 FROM debian:latest MAINTAINER Istvan Lantos <info@lantosistvan.com> LABEL Description="This image is the base of the other app images in this project" Vendor="Istvan Lantos" Version="1.0" ENV TERM linux ENV DEBIAN_FRONTEND noninteractive RUN ln -sf /bin/bash /bin/sh && ln -sf /bin/bash /bin/sh.distrib RUN echo -e "\ deb http://httpredir.debian.org/debian stable main contrib non-free\n\ deb-src http://httpredir.debian.org/debian stable main contrib non-free\n\ deb http://security.debian.org stable/updates main contrib non-free\n\ deb-src http://security.debian.org stable/updates main contrib non-free\n\ deb http://httpredir.debian.org/debian stable-updates main contrib non-free\n\ deb-src http://httpredir.debian.org/debian stable-updates main contrib non-free" > /etc/apt/sources.list RUN apt-get -y update && apt-get -y dist-upgrade ### Start of optimizations # https://easyengine.io/tutorials/linux/increase-open-files-limit/ RUN echo -e "\n\ * hard nofile 500000\n\ * soft nofile 500000\n\ root hard nofile 500000\n\ root soft nofile 500000" >> /etc/security/limits.conf \ && echo -e "session required pam_limits.so" >> /etc/pam.d/common-session \ && echo -e "fs.file-max = 2097152" >> /etc/sysctl.conf ### End of optimizations ### Start of Nginx WEBSERVER setup RUN mkdir -p /var/www # Modify www-data user and set UID, GID to 500 # https://muffinresearch.co.uk/linux-changing-uids-and-gids-for-user/ RUN groupmod -g 500 www-data \ && usermod -u 500 www-data \ #&& `find / -user 33 -exec chown -h 500 {} \;` \ #&& `find / -group 33 -exec chgrp -h 500 {} \;` \ && usermod -g 500 www-data \ && chown -R www-data:www-data /var/www \ && chmod g+s /var/www ### End of Nginx WEBSERVER setup RUN mkdir -p /root/lemp_base_volume RUN rm -rf /var/lib/apt/lists/* CMD ["tail", "-f", "/dev/null"] 

更新2:

似乎你不能雏菊链你的容器来创build一个构build顺序,因为在mariadb发生的事情是导致所有的静态networking服务器文件的删除。

这是我现在的docker-compose文件,我回到了我的旧的解决scheme,我曾经把所有的东西都链接到底层,而不是把它们分享到php中,而不是把它们链接起来:

 cadvisor: image: google/cadvisor:latest container_name: lemp_cadvisor ports: - "8080:8080" volumes: - "/:/rootfs:ro" - "/var/run:/var/run:rw" - "/sys:/sys:ro" - "/var/lib/docker/:/var/lib/docker:ro" base: build: ./base container_name: lemp_base volumes: - /root/lemp_base_volume www: image: lemp_base container_name: lemp_www volumes_from: - base volumes: - /home/core/server-lemp/www:/var/www:rw phpmyadmin: build: ./phpmyadmin container_name: lemp_phpmyadmin volumes_from: - base volumes: - /var/www/phpmyadmin - ./phpmyadmin/var/www/phpmyadmin/config.inc.php:/var/www/phpmyadmin/config.inc.php:rw ffmpeg: build: ./ffmpeg container_name: lemp_ffmpeg volumes_from: - base volumes: - /usr/ffmpeg mariadb: build: ./mariadb container_name: lemp_mariadb environment: - MYSQL_ROOT_PASSWORD=your-db-pwd volumes_from: - base volumes: - /var/run/mysqld - /home/core/server-lemp/mariadb:/var/lib/mysql:rw - ./mariadb/etc/mysql/my.cnf:/etc/mysql/my.cnf:ro php: build: ./php container_name: lemp_php volumes_from: - www - phpmyadmin - ffmpeg - mariadb volumes: - /var/run/php-fpm - ./php/usr/local/php7/etc/php-fpm.conf:/usr/local/php7/etc/php-fpm.conf:ro - ./php/usr/local/php7/etc/php.ini:/usr/local/php7/etc/php.ini:ro - ./php/usr/local/php7/etc/php-fpm.d/www.conf:/usr/local/php7/etc/php-fpm.d/www.conf:ro - ./php/etc/cron.d:/etc/cron.d:ro nginx: build: ./nginx container_name: lemp_nginx ports: - "80:80" - "443:443" volumes_from: - php volumes: - /var/cache/nginx - ./nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

我创build了一个名为www的新容器,它是从主机共享的静态Web服务器文件的基础映像。 现在base只需要,因为每个其他的图像将从这个图像构build。

就像在我以前的解决scheme中,我使用link创buildnetworking一样,每个共享卷都将在phpphp的共享内容中与nginx共享,这是最重要的。

所以:

 links: - base 

变成了:

 volumes_from: - base 

维护构build顺序并确保首先构buildbase

我用docker-compose --x-networking --x-network-driver=bridge up为这个堆栈创build了一个桥接networking。

但看起来像cron作业不工作,再次。

UPDATE3:

这是我用rsyslog得到的:

 root@0687540163a3:/var/log# cat syslog Jan 22 14:45:04 0687540163a3 rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="13" x-info="http://www.rsyslog.com"] start Jan 22 14:45:04 0687540163a3 rsyslogd: imklog: cannot open kernel log(/proc/kmsg): Operation not permitted. Jan 22 14:45:04 0687540163a3 rsyslogd-2145: activation of module imklog failed [try http://www.rsyslog.com/e/2145 ] Jan 22 14:45:04 0687540163a3 cron[22]: (CRON) INFO (pidfile fd = 3) Jan 22 14:45:04 0687540163a3 cron[23]: (CRON) STARTUP (fork ok) Jan 22 14:45:04 0687540163a3 cron[23]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab) Jan 22 14:45:04 0687540163a3 cron[23]: (*system*wpcron) NUMBER OF HARD LINKS > 1 (/etc/cron.d/wpcron) Jan 22 14:45:04 0687540163a3 cron[23]: (*) ORPHAN (no passwd entry) Jan 22 14:45:04 0687540163a3 cron[23]: (CRON) INFO (Running @reboot jobs) Jan 22 14:46:01 0687540163a3 cron[23]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab) Jan 22 14:46:01 0687540163a3 cron[23]: (*system*wpcron) NUMBER OF HARD LINKS > 1 (/etc/cron.d/wpcron) Jan 22 14:46:01 0687540163a3 cron[23]: (*) ORPHAN (no passwd entry) 

这是我的wpcron文件的样子:

 */1 * * * * www-data php /var/www/domain.com/wp-cron.php >> /var/log/wp-cron.log 2>&1 

在第一个5分钟之后,/ /var/log/wp-cron.log仍然没有创build。

我遇到了与你同样的问题。我认为, lemp_mariadb容器有一些问题。

解决这个问题。 您应该尝试以下步骤:获取lemp_mariadb容器ID:

 docker ps -a 

如果您看到lemp_mariadb状态为Dead 。 你应该去/var/lib/docker/containers 。 您可以find与lemp_mariadb容器标识名称相同的目录并将其删除

 rm -rf /var/lib/docker/containers/lemp_mariadb_container_id