【问题标题】:Hidden file .env not copied using Docker COPY隐藏文件 .env 未使用 Docker COPY 复制
【发布时间】:2017-06-27 05:07:10
【问题描述】:

我有一个 Dockerfile,有这样的语法 COPY ["Gemfile", "Gemfile.lock", "Procfile", ".env", "/huginn/"]

我使用RUN /bin/bash -l -c "ls -a"检查文件处理状态,我发现.env文件没有被复制到图像中。

我将 .env 文件名改为 test.env 并使用COPY ["Gemfile", "Gemfile.lock", "Procfile", "test.env", "/huginn/"],然后它工作,将 test.env 复制到图像中。

有人知道为什么吗?而任何解决方案都可以让docker支持COPY.env文件名?

【问题讨论】:

  • 一个.env文件默认应该被复制,ls是在同一个目录下运行的吗? ls -a /huginn?
  • 路径必须在构建的上下文中;你不能 COPY ../something /something,因为 docker build 的第一步是将上下文目录(和子目录)发送到 docker 守护进程。

标签: linux ubuntu docker docker-compose dockerfile


【解决方案1】:

我遇到了同样的问题,这是一个简单的解决方案===>

复制具有确切目录路径的隐藏文件,例如:-

示例:- 复制路径/.hidenfile 目的地路径

【讨论】:

    【解决方案2】:

    .dockerignore file文档中有这样的说法:

    Note: For historical reasons, the pattern . is ignored.
    

    【讨论】:

      【解决方案3】:

      分享我的dockerfile,它现在可以正常工作了

      FROM ruby:2.3
      
      MAINTAINER Tomato <tsaohucn@gmail.com>
      
      ENV DEBIAN_FRONTEND noninteractive
      ENV LANG C.UTF-8
      ENV RAILS_VERSION 5.0.1
      
      # install rails && bundler
      RUN gem install rails --version "$RAILS_VERSION"
      
      WORKDIR /huginn
      
      # copy huginn config file
      COPY ["Gemfile", "Gemfile.lock", "Procfile", ".env", "/huginn/"]
      COPY lib/gemfile_helper.rb /huginn/lib/
      COPY vendor/gems /huginn/vendor/gems
      
      # run bundle install
      RUN bundle install
      
      # copy huginn
      COPY . /huginn/
      RUN ls -a
      

      还有一个 .dockerignore:

      .git
      tmp
      log
      doc
      spec
      media
      .openshift
      .bundle
      vendor/bundle
      db/*.sqlite3
      public/system/*
      coverage
      .travis.yml
      build_docker_image.sh
      # Copied from .gitignore
      *.rbc
      *.sassc
      .sass-cache
      capybara-*.html
      .rspec
      !/tmp/.gitkeep
      **.orig
      rerun.txt
      pickle-email-*.html
      .idea/
      .DS_Store
      deployment/tmp
      deployment/cookbooks
      .vagrant
      .*un~
      .ruby-gemset
      .ruby-version
      manifest.yml
      config/unicorn.rb
      db/schema.rb
      

      【讨论】:

        【解决方案4】:

        您的 COPY 语法错误,此语法对 Dockerfile 中的 ENTRYPOINT 或 CMD 有效。

        请参阅文档以获取 COPY

        https://docs.docker.com/engine/reference/builder/#/copy

        【讨论】:

        【解决方案5】:

        如果您有 .dockerignore 文件,那么您可能会添加它以忽略隐藏文件,例如 .git.vagrant 等。

        如果.dockerfile 忽略隐藏文件,那么您可以启用不忽略或更改文件名。

        For more info about .dockerignore file

        【讨论】:

        • 如果文件被忽略,命令会报错lstat .env: no such file or directory
        • 你是对的,有一个.dockerignore文件被添加到忽略隐藏文件.env,所以我不能COPY .env文件,谢谢你的帮助。
        猜你喜欢
        • 2010-10-16
        • 2016-10-15
        • 2021-05-22
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        相关资源
        最近更新 更多