docker - состав: максимальная глубина превышена - PullRequest
0 голосов
/ 30 января 2020

Я использовал docker -compose, но когда я попытался построить его снова, эта ошибка показывает, что я собрал этот docker -compose несколько раз:

ERROR: Service 'api' failed to build: max depth exceeded

Я пытался выполнить docker Системное удаление для очистки моих контейнеров, но это не сработало.

docker -compose.yml

version: "3"
services:
    client:
        container_name: my_client
        image: mhart/alpine-node:12
        build: ./client      
        restart: always
        ports:
            - "3000:3000"
        working_dir: /client
        volumes:
            - ./client:/client
        entrypoint: ["npm", "start"]
        links:
            - api
        networks: 
            - my_network
    api:
        container_name: my_api
        build: ./api
        restart: always
        ports:
            - "9000:9000"
        environment:
            DB_HOSTNAME: mysql    
        working_dir: /api
        volumes:
            - ./api:/api
        depends_on: 
            - mysql
        networks:
            - my_network
    mysql:
        container_name: my_mysql
        build: ./db
        restart: always
        volumes:
            - /var/lib/mysql
            - ./db:/db
        ports:
            - "3307:3306"
        environment:
            - MYSQL_ROOT_PASSWORD=n 
            - MYSQL_USER=n
            - MYSQL_PASSWORD=n
            - MYSQL_DATABASE=n
        networks: 
            - my_network
        command: '--default-authentication-plugin=mysql_native_password'
networks:
    my_network:
        driver: bridge

Это Dockerfile:

FROM mhart/alpine-node:12
WORKDIR /api
COPY package*.json /api/
RUN npm i -G nodemon
RUN npm install
COPY . /api/
EXPOSE 9000
CMD ["npm", "run", "dev"]

любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Максимальная глубина не указывает на ошибку нехватки памяти (хотя чернослив может ее случайно исправить).

Скорее, это означает, что создаваемое вами изображение api имело слишком много слоев.

Правдоподобная теория состоит в том, что у вас есть рекурсия, вызванная наличием этого в вашем файле компоновки:

        image: mhart/alpine-node:12
        build: ./client      

и это в Dockerfile

FROM mhart/alpine-node:12

(я предполагаю, что Dockerfile в ./client также FROM то же изображение).

Ваша сборка по сути, добавляет несколько слоев на ваше локальное изображение mhart/alpine-node:12 каждый раз, когда вы запускаете его (вы можете подтвердить, запустив docker history mhart/alpine-node:12).

Если это так, вам, вероятно, следует переименовать image в вашем файле композиции.

0 голосов
/ 30 января 2020

Итак, я выяснил, мне просто нужно было выполнить docker system prune -a, чтобы удалить все остановленные контейнеры. Теперь --build снова работает.

Эта команда удалила все мои локальные docker изображения, связанные с моим dockerfile. После того, как его построили так много раз, мое локальное хранилище достигло предела, поэтому максимальная глубина ошибки превышена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...