首页 > 解决方案 > 如何在 Dockerfile 或 docker-compose 中使用 touch 创建文件?

问题描述

我想使用touchbyDockerfile或创建一个空的数据库文件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 0modbus.db由于以下部分,将创建一个名为而不是文件的目录:

volumes:
  - "./model/modbus.db:/app/model/modbus.db:rw"

TL;博士:

如何将新文件从容器发送到主机中不存在的主机?(换句话说,它是在容器内部完成的,而不是在主机中)

标签: dockerubuntudocker-composedockerfile

解决方案


我不确定,docker-compose.ymldockerfile你所拥有的似乎正在为我工​​作。

长这样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 

推荐阅读