在构建Docker容器时在已安装的卷上创建文件

时间:2018-11-30 10:33:40

标签: docker permissions docker-compose dockerfile docker-volume

我正在尝试在构建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
  • cd到文件夹/var/www/public,文件text.txt不存在

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

卷装载在运行时应用,而不是在构建期间应用。构建的输出是一个可移植的映像,而不是映像和一些需要单独运送的持久性数据。该文件应存在于映像中,具体取决于Dockerfile的其余部分。

在运行时挂载主机卷时,主机挂载会隐藏内置映像中的所有内容。您只能看到主机中存在的文件(以及权限,uid和gid)。

但是,如果切换到命名卷,则docker将在该卷为新卷/空卷时使用该位置的图像内容初始化该卷。

答案 1 :(得分:0)

您应该在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 "

由于要在构建映像后装入卷。