如何在构建时在Docker容器卷中添加文件

时间:2018-07-05 12:07:20

标签: docker dockerfile volume

我有一个要在容器中运行的python和java应用程序。 我有一个名为pass-hash的文件夹,其中: -h2o-start文件夹,其中包含我用来启动Dockerfile的{​​{1}},该文件夹启动用于机器学习的服务器。 -h2o.jar文件夹,其中包含model-generator和一个passhash.py文件。 data.csv应用程序包含passhash.py,该文件从我在容器中创建的h2o.import_file("/var/my-data/data.csv")文件夹中提取data.csv文件,并生成一个POJO文件。 my-data包含:

h2o-start Dockerfile

FROM openjdk:8 ADD h2o.jar h2o.jar EXPOSE 54321 EXPOSE 54322 ENTRYPOINT ["java", "-jar", "h2o.jar"] 包含:

model-generator Dockerfile

FROM python:2.7-slim WORKDIR /model-generator ADD . /model-generator RUN mkdir /var/my-data COPY data.csv /var/my-data RUN chmod 777 /var/my-data/data.csv RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 8080 ENV NAME World CMD ["python", "passhash.py"] 文件包含:

docker-compose.yml

3 个答案:

答案 0 :(得分:1)

Docker卷旨在在主机和Docker容器之间共享文件夹。如果您在主机上复制任何文件(卷的位置路径),它将自动进入容器内的可用文件。

docker卷的语法如下:

 -v /home/data:/data

在以上语法中, / home / data 在主机上可用,而 / data 该文件夹在Docker容器中可用。

如果您在主机上的 / home / data 文件夹中复制任何文件,则该文件将自动在容器 / data 文件夹中可用。

希望这对您很清楚。

如果您使用的是docker-compose,请按如下所示添加卷标

 volumes:
   - /home/data:/data

例如:

version '3'
 services:
  app:
   image: nginx:alpine
     ports:
     - 80:80
   volumes:
    - /home/data:/data

答案 1 :(得分:1)

如果您的意思是在构建docker时添加文件,请查看ADDCOPY说明。

答案 2 :(得分:1)

  

我不知道,这就是我想出的解决方案。您能告诉我更好的解决方案吗?我的问题是:我有一个使用data.csv文件生成POJO机器学习模型的python应用程序。当我为数据文件指定此python应用程序的路径时,它给出了一个例外,即该文件不存在。另外,我还有另一个用Java编写的应用程序,它使用生成的POJO文件,并根据该数据给出预测。 Java应用程序还每天更新data.csv文件。我希望每个应用程序(微服务)都在单独的容器中运行,但希望它们都使用data.csv

要回答这个问题,您需要使用卷。

尝试下面的代码。

这是您的docker-compose文件

version: "3" 
services: 
  h2o-start: 
  image: milanpanic2/h2o-start 
  build: context: ./h2o-start 
  ports: 
    - "54321:54321" - "54322:54322" 
  volumes: 
    - /home/data:/var/my-data 
model-generator: 
 image: milanpanic2/model-generator 
 build: context: ./model-generator 
 ports: 
  - "8080:8080" 
 depends_on: 
  - "h2o-start" 
 volumes: 
  - /home/data:/var/my-data

这是您的docker文件

FROM python:2.7-slim 
WORKDIR /model-generator 
ADD . /model-generator 
RUN mkdir /var/my-data
RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 8080 ENV 
NAME World CMD ["python", "passhash.py"]

您的Java docker文件在哪里?

现在只需创建一个默认的data.csv文件并将其复制到您的主机位置/ home / data。

运行应用程序,让我知道。