我想我要瘋了。我已經到處搜索了,似乎在 Stack、GitHub 和其他遠距離互聯網上都找不到有效的解決方案。在這個特定的項目中,運行docker-compose build需要FOREVER。以前不是這樣的,在其他使用 Docker 的項目上,這根本不是問題。并且永遠......我說的是大約 10-15 分鐘的構建時間,而過去它只需要大約 2 分鐘。我有兩個不同的同事 DL同一個 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。需要明確的是,它在任何事情真正開始之前就掛在“Building php”(或“Building 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
1 回答

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
這來自您的構建上下文(通常是您運行構建的目錄,但可以像您在撰寫文件中所做的那樣被覆蓋)。在執行構建之前發送的上下文目錄中有大量文件或大文件。
您可以使用.dockerignore
其具有幾乎相同的格式.gitignore
來排除在構建時發送的文件。并且使用 BuildKit(如果您export DOCKER_BUILDKIT=1
在最新版本的 docker 中啟用)它只會在您顯式復制文件時發送上下文,然后只有當這些文件從緩存中的可用文件發生更改時才會發送上下文。
有關構建上下文的更多信息,請參閱:https ://docs.docker.com/engine/reference/commandline/build/
還有最佳實踐:https ://docs.docker.com/develop/develop-images/dockerfile_best-practices/
- 1 回答
- 0 關注
- 202 瀏覽
添加回答
舉報
0/150
提交
取消