首页 > 解决方案 > Docker COPY 成功但检查无文件

问题描述

我把这一行放在我的 Docker 文件中。

COPY gorpyter_tutorial.ipynb /usr/local/man

此消息显示在 上build

Step 4/10 : COPY gorpyter_tutorial.ipynb /usr/local/man
 ---> b4b53dc0c6b1

但是当我exec... /bin/bash进入容器时,它不在期望目录或任何其他目录中。

$ cd ~
$ find * gorpyter_tutorial.ipynb

'find: ‘gorpyter_tutorial.ipynb’: No such file or directory'

不过,我的其他更改(例如设置环境变量和安装库)正在成功运行。


Dockerfile

FROM jupyter/datascience-notebook:latest

MAINTAINER layne sadler <lsadler@wuxinextcode.com>

USER root

COPY gorpyter_tutorial.ipynb /usr/local/man

RUN sudo apt-get update && sudo apt-get install openjdk-8-jdk -y

ENV JUPYTER_ENABLE_LAB=yes
ENV NOTEBOOK_DIR=/usr/local/man
ENV R_HOME=/opt/conda/lib/R
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

WORKDIR /usr/local/man

# https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html

码头工人-compose.yml

version: "3"
services:
  jupyter:
    image: "hashrocketsyntax/gorpyter:skyline"
    ports:
      - "8888:8888"
    volumes:
      - /Users/laynesadler/Desktop/notebooks:/usr/local/man

我不允许复制到/usr/local/man卷中吗?

标签: dockerdockerfile

解决方案


您的 Dockerfile 包含创建映像的说明。镜像构建完成后,可以将镜像作为容器运行

启动容器时附加了一个卷。

因此,在构建映像时使用 Dockerfile 指令将文件复制到卷中是没有意义的。因此,只有在容器启动后才存在卷。

卷是在 Docker 容器和服务中持久保存数据的首选方式。卷的一些用例包括:

在多个正在运行的容器之间共享数据。如果您没有显式创建它,则会在第一次将其挂载到容器中时创建一个卷。当该容器停止或移除时,该卷仍然存在。多个容器可以同时挂载同一个卷,无论是读写还是只读。仅当您明确删除它们时才会删除卷。

当 Docker 主机不能保证具有给定的目录或文件结构时。卷可帮助您将 Docker 主机的配置与容器运行时分离。

当您想将容器的数据存储在远程主机或云提供商上而不是本地时。

当您需要从一台 Docker 主机备份、恢复或迁移数据到另一台主机时,卷是更好的选择。您可以停止使用该卷的容器,然后备份该卷的目录(例如 /var/lib/docker/volumes/)。

参考


推荐阅读