[英]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.