构建 docker 容器时在挂载卷上创建文件
Creating a file on a mounted volume while building a docker container
我试图在构建 docker 容器时创建一个文件,当我构建它时我没有收到任何错误并且文件似乎已正确写入,但是当我通过 ssh 进入容器时该文件不存在。
我通过在 Dockerfile
上执行 RUN echo "Some line to add to a file" >> /var/www/public/text.txt
来编写文件
我的 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
不存在
有什么想法吗?
你应该 运行 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 "
因为您是在构建映像后装载卷。
卷安装适用于 运行 时间,而不是在构建期间。构建的输出是一个可移植的图像,而不是一个图像和一些您需要单独发送的持久数据。该文件应该存在于您的图像中,具体取决于您的 Dockerfile 的其余部分。
当您在 运行 时挂载主机卷时,构建映像中的任何内容都会被主机挂载隐藏。您只能看到主机中存在的文件(以及权限、uid 和 gid)。
但是,如果您切换到命名卷,docker 将在 new/empty 时使用该位置的图像内容初始化该卷。
我试图在构建 docker 容器时创建一个文件,当我构建它时我没有收到任何错误并且文件似乎已正确写入,但是当我通过 ssh 进入容器时该文件不存在。
我通过在
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
不存在
RUN echo "Some line to add to a file" >> /var/www/public/text.txt
来编写文件
有什么想法吗?
你应该 运行 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 "
因为您是在构建映像后装载卷。
卷安装适用于 运行 时间,而不是在构建期间。构建的输出是一个可移植的图像,而不是一个图像和一些您需要单独发送的持久数据。该文件应该存在于您的图像中,具体取决于您的 Dockerfile 的其余部分。
当您在 运行 时挂载主机卷时,构建映像中的任何内容都会被主机挂载隐藏。您只能看到主机中存在的文件(以及权限、uid 和 gid)。
但是,如果您切换到命名卷,docker 将在 new/empty 时使用该位置的图像内容初始化该卷。