Создание файла на подключенном томе при сборке контейнера Docker - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь создать файл при сборке контейнера Docker, когда я его создаю, я не получаю никакой ошибки, и кажется, что файл был записан правильно, однако, когда я ssh в контейнер, файла там нет.

  • Я пишу файл, выполнив RUN echo "Some line to add to a file" >> /var/www/public/text.txt на Dockerfile

  • Мой docker-compose.yml выглядит так:

    version: '2'
    
    services:
    web:
        build: web/
        ports:
            - "8080:80"
        volumes:
            - ./web/:/var/www/
        env_file:
            - web/.env
    
  • Я выполняю docker-compose up --build

  • Я затем делаю docker exec -it <container id> bash
  • I cd для папки /var/www/public и файла text.txt не там

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Объем монтирования применяется во время выполнения, а не во время сборки.Результатом сборки является переносимое изображение, а не изображение и некоторые постоянные данные, которые вам нужно будет отправить отдельно.Этот файл должен существовать внутри вашего образа, в зависимости от остальной части вашего Dockerfile.

Когда вы монтируете том хоста во время выполнения, все, что находится внутри встроенного образа, скрывается монтированием хоста.Вы видите только файлы (вместе с разрешениями, uid и gid) в том виде, в котором они существуют на хосте.

Однако, если вы переключитесь на именованные тома, docker инициализирует этот том, когда он новый / пустой, с содержимымизображение в этом месте.

0 голосов
/ 30 ноября 2018

Вы должны выполнить команду в файле docker-compose.yml - версия: '2'

services:
web:
    build: web/
    ports:
        - "8080:80"
    volumes:
        - ./web/:/var/www/
    env_file:
        - web/.env
    command:"echo "Some line to add to a file" >> /var/www/public/text.txt "

Поскольку вы монтируете тома после построения образа.

...