我想在touch
或Dockerfile
中使用docker-compose.yml
创建一个空的DB文件,并在容器和主机之间对其进行卷处理,我也可以通过以下步骤在该容器中手动创建该文件:
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
network_mode: "host"
container_name: collector
restart: unless-stopped
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
[NOTE]:
在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; DR:
如何将新文件从容器发送到主机中不存在的主机? (在容器内部完成,而不是在主机中完成)
将以下内容放入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
,但您似乎对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
我把它缩进了容器中,并且能够找到该文件。
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