如何在Dockerfile或docker-compose中使用触摸创建文件?

问题描述 投票:2回答:2

我想在touchDockerfile中使用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 ubuntu docker-compose dockerfile
2个回答
1
投票

将以下内容放入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

0
投票

我不确定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 
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.