Ben*_*ari 6 ubuntu docker dockerfile docker-compose
我想使用touchbyDockerfile或docker-compose.yml并对其进行卷创建一个空的数据库文件。实际上,我可以在容器中手动创建它,如下所示:
docker exec -it <container-name> bash
# touch /app/model/modbus.db
Run Code Online (Sandbox Code Playgroud)
然而,当我使用以下过程时,它会抛出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
Run Code Online (Sandbox Code Playgroud)
除此之外,我也尝试过但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
Run Code Online (Sandbox Code Playgroud)
[笔记]:
也没有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"
Run Code Online (Sandbox Code Playgroud)
长话短说:
如何从容器发送一个主机上不存在的新文件到主机上?(换句话说,它是在容器内部完成的,而不是在主机中完成的)
将以下内容放入 docker-compose.yml 中
volumes:
- "./model:/app/model"
Run Code Online (Sandbox Code Playgroud)
这将在容器内创建一个 /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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22899 次 |
| 最近记录: |