繁体   English   中英

docker-compose删除共享卷

[英]docker-compose removing shared volume

我有这个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

当我启动该堆栈时,每个文件都将在与/var/www共享的主机上的/home/core/server-lemp/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:

似乎您无法以菊花链式连接容器来创建构建顺序,因为mariadb发生了某些事情,这会导致您删除所有静态Web服务器文件。

现在这是我的docker-compose文件,我回到了我的旧解决方案中,我曾经将所有内容链接到基础,而不是将它们的卷共享到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

我创建了一个名为www的新容器,它是基础图像,其中包含从主机共享到的静态Web服务器文件。 现在仅需使用base因为所有其他图像都将根据该图像生成。

就像在我以前的解决方案中(我使用link创建网络)一样,每个共享卷都将在php相遇,而php的卷共享给nginx ,这是一切之上的。

所以:

links:
  - base

变成了:

volumes_from:
  - base

为了维持构建顺序并确保首先构建base

我使用docker-compose --x-networking --x-network-driver=bridge up为该堆栈创建了桥接网络。

但是看起来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

我也遇到了同样的问题,我认为lemp_mariadb容器存在一些问题。

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

docker ps -a

如果看到lemp_mariadb状态为Dead 您应该转到/var/lib/docker/containers 您找到具有与lemp_mariadb容器ID相同名称的目录并将其删除

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM