J'ai un Dockerfile et il y a une syntaxe comme celle-ci COPY ["Gemfile", "Gemfile.lock", "Procfile", ".env", "/huginn/"]
J'utilise RUN /bin/bash -l -c "ls -a"
pour vérifier l'état du fichier, je trouve que le fichier .env ne doit pas être copié dans l'image.
Je change le nom du fichier .env en test.env et j'utilise COPY ["Gemfile", "Gemfile.lock", "Procfile", "test.env", "/huginn/"]
, puis ça marche, test.env est copié dans l'image.
Quelqu'un sait pourquoi? Et n'importe quelle solution peut permettre à docker de prendre en charge le nom de fichier COPY
.env?
Si tu as .dockerignore
fichier alors il peut être ajouté pour ignorer les fichiers cachés comme .git
, .vagrant
etc.
Si .dockerfile
en ignorant les fichiers cachés, vous pouvez soit activer pour ne pas ignorer ni modifier le nom du fichier.
partager mon dockerfile, il peut fonctionner correctement maintenant
FROM Ruby:2.3
MAINTAINER Tomato <[email protected]>
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
Et il y a un .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
Votre syntaxe COPY est incorrecte, cette syntaxe est valide pour ENTRYPOINT ou CMD dans un Dockerfile.
Voir le doc pour COPY
Il y a une déclaration dans la documentation . Dockerignore :
Note: For historical reasons, the pattern . is ignored.