如何在Dockerfile或docker compose中使用触摸创建文件?
我想使用如何在Dockerfile或docker compose中使用触摸创建文件?,docker,ubuntu,docker-compose,dockerfile,Docker,Ubuntu,Docker Compose,Dockerfile,我想使用Dockerfile或docker compose.yml中的touch创建一个空DB文件,并在容器和主机之间对其进行卷装,我还可以通过以下步骤在此容器中手动创建它: docker exec -it <container-name> bash # touch /app/model/modbus.db 此外,我还尝试了Dockerfile todo,但没有成功: FROM python:3.6-slim ENV PYTHONUNBUFFERED 1 RUN mkdir /
Dockerfile
或docker compose.yml中的touch
创建一个空DB文件,并在容器和主机之间对其进行卷装,我还可以通过以下步骤在此容器中手动创建它:
docker exec -it <container-name> bash
# touch /app/model/modbus.db
此外,我还尝试了Dockerfile todo,但没有成功:
FROM python:3.6-slim
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /
ADD . /app
RUN touch /app/model/modbus.db # Note
CMD python app
[注意]:
如果没有命令:docker-compose.yml中的bash-c“touch/app/model/modbus.db”
,则退出,代码为0
错误原因;由于以下部分,将创建一个具有modbus.db
名称的目录,而不是文件:
volumes:
- "./model/modbus.db:/app/model/modbus.db:rw"
[更新]
TL;博士:
如何将容器中不存在的新文件发送到主机?(这是在容器内部完成的,而不是在主机中)将以下内容放入docker-compose.yml中
volumes:
- "./model:/app/model"
这将在容器内创建一个/app/model文件夹。其内容(您将在容器内创建)将在主机上的./model上可用
如果将touch命令放在Dockerfile的CMD中,则当卷也初始化时,启动容器后将创建该文件。因此,以下Dockerfile应该可以工作:
FROM python:3.6-slim
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /
ADD . /app
CMD touch /app/model/modbus.db && python app
我不确定docker compose.yml的docker,但是你的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'ed放入容器中,并能够找到该文件
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
我用“在容器和主机之间创建文件和卷”更新了我的问题-您的方式在docker compose中的卷属性不起作用,而当我删除它时,它起作用。这是它的相关错误:unknown:您是否尝试将目录装载到文件上(反之亦然)?检查指定的主机路径是否存在,是否为预期类型
好的,我想我现在明白了您真正的问题所在。更新了我的答案。我的问题是,没有任何touch
命令,docker compose中只有volume命令,它会用modbus.db
创建一个文件夹,而不是我在问题“注意”中提到的文件,所以你确定本地主机上的/model/modbus.db是一个文件而不是一个目录吗?我用“在容器和主机之间创建文件和卷”
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