docker - 如何在 Dockerfile 或 docker-compose 中使用 touch 创建文件?
问题描述
我想使用touch
byDockerfile
或创建一个空的数据库文件docker-compose.yml
并对其进行卷。实际上,我可以在容器中手动创建它,如下所示:
docker exec -it <container-name> bash
# touch /app/model/modbus.db
然而,当我使用以下过程时,它会抛出exited with code 0
并停止:
version: '3'
services:
collector:
build: .
image: collector:2.0.0
command: bash -c "touch /app/model/modbus.db" # Note
# command: bash /app/bashes/create_an_empty_db.sh
volumes:
- "./model/modbus.db:/app/model/modbus.db:rw"
tty: true
除此之外,我也尝试过,Dockerfile
但没有任何成功:
FROM python:3.6-slim
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /
ADD . /app
RUN touch /app/model/modbus.db # Note
CMD python app
[注意]:
也没有其中command: bash -c "touch /app/model/modbus.db"
的docker-compose.yml
原因exited with code 0
;modbus.db
由于以下部分,将创建一个名为而不是文件的目录:
volumes:
- "./model/modbus.db:/app/model/modbus.db:rw"
TL;博士:
如何将新文件从容器发送到主机中不存在的主机?(换句话说,它是在容器内部完成的,而不是在主机中)
解决方案
我不确定,docker-compose.yml
但dockerfile
你所拥有的似乎正在为我工作。
长这样Dockerfile
,
FROM python:3.6-slim
RUN mkdir /app
WORKDIR /
RUN touch /app/modbus.db
构建 dockerfile,
docker build -t test .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM python:3.6-slim
---> 903e8a0f0681
Step 2/4 : RUN mkdir /app
---> Using cache
---> c039967bf463
Step 3/4 : WORKDIR /
---> Using cache
---> c8c81ac01f50
Step 4/4 : RUN touch /app/modbus.db
---> Using cache
---> 785916fe4cea
Successfully built 785916fe4cea
Successfully tagged test:latest
构建容器,
docker run -dit test
52cde500cda015f170140ae9e7174a0367b29265a49a3742173946b686179fb3
我 ssh 进入容器并能够找到该文件。
docker exec -it 52cde500cda015f170140ae9e7174a0367b29265a49a3742173946b686179fb3 /bin/bash
root@52cde500cda0:/# ls
app bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@52cde500cda0:/# cd app
root@52cde500cda0:/app# ls
modbus.db
推荐阅读
- javascript - 谷歌应用脚本超过最大执行时间问题
- typescript - type = interface1 或 interface2 ,无法使其工作
- spring-boot - 必须为 oauth2 客户端指定提供程序 ID?
- ios - CVOpenGLESTextureCacheCreateTextureFromImage for kCVPixelFormatType_OneComponent8
- php - 在 PHP 中为数组的每个元素添加键和值
- git - git for-each-ref 字段语法
- html - 如何修复我的 React/ElectronJS 视图的大小?
- outlook-web-addins - AAD for Outlook 加载项中的对话框身份验证
- go - 为什么这个 goroutine 没有运行,即使有一个`time.Sleep`?
- javascript - 有没有办法在 ext js 中重新渲染复选框?