我感觉我快要疯了。我在Stack、GitHub和其他地方搜索了很久,似乎找不到一个可行的解决方案。
在这个特定项目中,运行docker-compose build
需要非常长的时间。这种情况过去并没有发生过,在其他使用Docker的项目中完全没有问题。我指的是大约需要10-15分钟来构建,而以前最多只需要2分钟。我有两个同事下载了相同的repo(一个是Ubuntu 18,另一个是macOS 14.x)。当他们运行build
命令时,整个过程只用了约2分钟。这两个人之前都没有构建过这个项目,所以他们从头开始。
我已经卸载/重装了Docker,运行了完整的docker system prune -a
,通过WiFi连接,通过以太网连接,尝试了另一个WiFi网络,修改了我的Compose文件,修改了我的Docker文件——但是一切都没用。
我的机器是一台2018年的MacBook Pro,配备有四核2.7GHz i7、运行macOS 10.14.6的16GB RAM和Docker Desktop 2.1.0.5。
我允许Docker Desktop使用高达12GB的RAM。在构建过程中,我的机器CPU使用率平均飙升至110%到270%,运行com.docker.hyperkit
进程。
需要明确的是,在任何真正开始之前,它都会停滞在“构建php”(或“构建web”)状态消息上。之后,实际的构建过程运行顺畅且快速。
这是我的docker-compose.yaml文件:
version: '3.1'
services:
db:
container_name: clientsname.db
hostname: db
image: mariadb:10.4.1-bionic
volumes:
- ./db-data:/var/lib/mysql:delegated
ports:
- 3307:3306
environment:
MYSQL_DATABASE: my_database
MYSQL_USER: my_user
MYSQL_PASSWORD: my_pass
MYSQL_ROOT_PASSWORD: my_pass
php:
container_name: clientsname.php
hostname: php
build:
dockerfile: php/php.dockerfile
context: ./
environment:
XDEBUG_CONFIG: remote_host=${REMOTE_HOST}
volumes:
- ../web:/var/www/web
- ../moodle:/var/www/moodle
- ../moodledata:/var/www/moodledata
- ./php/custom.ini:/usr/local/etc/php/conf.d/zzz-custom.ini
- ./php/z-errors.ini:/usr/local/etc/php/conf.d/z-errors.ini:delegated
- ./php/z-upload.ini:/usr/local/etc/php/conf.d/z-upload.ini:delegated
- ./php/z-xdebug.ini:/usr/local/etc/php/conf.d/z-xdebug.ini:delegated
depends_on:
- db
web:
container_name: clientsname.web
hostname: web
build:
dockerfile: nginx/nginx.dockerfile
context: ./
volumes:
- ../web:/var/www/web
- ../moodle:/var/www/moodle
- ../moodledata:/var/www/moodledata
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/ssl:/etc/nginx/ssl
- ./logs:/var/log/nginx
ports:
- 80:80
- 443:443
depends_on:
- php
- db
这里是被引用的php.dockerfile文件:
FROM php:7.2.26-fpm
LABEL maintainer="My Clients Name"
# Environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV COMPOSER_NO_INTERACTION=1
ENV COMPOSER_HOME=/usr/local/share/composer
# Working Directory
WORKDIR /var/www/web
WORKDIR /var/www/moodle
WORKDIR /var/www/moodledata
RUN rm /etc/apt/preferences.d/no-debian-php && apt-get update && apt-get install -y --no-install-recommends apt-utils \
build-essential \
php-soap \
libzip-dev \
libmagickcore-dev \
libmagickwand-dev \
libmagic-dev \
libpng-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libmemcached-dev \
zlib1g-dev \
nano \
sudo \
gnupg \
curl \
unzip && \
docker-php-ext-install soap pdo_mysql mysqli && \
docker-php-ext-install -j$(nproc) gd iconv && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
pecl install zip-1.15.2 imagick memcached-3.0.4 xdebug && \
docker-php-ext-enable memcached imagick zip xdebug
# Install Composer, Node, Gulp, and SASS
RUN curl -s https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && apt-get install -y nodejs && npm install npm@latest -g && npm install --global gulp-cli && npm config set unsafe-perm=true
# Export composer vendor path
RUN echo "" >> ~/.bashrc && echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.bashrc
以及被引用的nginx.dockerfile
FROM nginx:stable-alpine
RUN apk add --update bash && rm -rf /var/cache/apk/*
WORKDIR /var/www/web
这让我感到非常恼火……我到底做错了什么?如果我漏掉了任何你们想要知道的内容,请告诉我,我会更新帖子。
更新
感谢@BMitch和所有已经评论的人。我将整个/docker构建目录移动到一个测试文件夹中,然后创建了空的/web、/moodle和/moodledata目录,然后运行build
命令。它立即开始编译。
让我觉得很奇怪的是,其他同事下载了与我相同的Git存储库,却没有遇到任何相同的问题。哦……我想我知道问题出在哪里了。
docker -v
和docker-compose version
- k0pernikus