Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como usar um parâmetro de ambiente no Dockerfile

Boa noite,

Estava tentando usar uma parâmetro de entrada dentro do Dokerfile sem sucesso. Tentei usar ARG e ENV para receber e usar essa vaiável de ambiente dentro do Dockerfile.

Tentei assim primeiro

Fazendo o build no próprio diretório dos arquivos :

docker build -f Dockerfile -t denis-schimidt/estudo-docker . 

Depois rodando o container

docker run -d -p 8080:3000 -e NAME=Schimidt --name=docker-estudo  denis-schimidt/estudo-docker 

Usando primeiro o Dockerfile

FROM node:latest
LABEL maintainer=Dênis\ Schimidt
ENV NAME
COPY . /var/www
WORKDIR /var/www
RUN mkdir files
RUN echo "Hello world," $NAME > files/greeting.txt
RUN npm install
ENTRYPOINT npm start
EXPOSE 3000

E depois

FROM node:latest
LABEL maintainer=Dênis\ Schimidt
ARG NAME
COPY . /var/www
WORKDIR /var/www
RUN mkdir files
RUN echo "Hello world," $NAME > files/greeting.txt
RUN npm install
ENTRYPOINT npm start
EXPOSE 3000
3 respostas

Olá bom dia Felipe Gonzaga, tudo bem?

Também estou com essa dúvida, se caso você conseguir resolver por fora do fórum, poderia colocar a solução aqui também?

Olá Felipe e Eduardo, tudo bem com vocês? Nessa sessão da documentação explica bem sobre as variáveis de ambiente no Dockerfile.

O que acontece é que a instrução ENV define a variável de ambiente <key> para um valor <value>. E pode atribuir valores de várias maneiras, acho que a melhor é:

ENV foo=/bar

Usando o sinal de igualdade "=", ou então podemos fazer da seguinte forma:

ENV foo /bar

Nesse caso o delimitador é o espaço, então ENV é a instrução que indica que desejamos criar uma variável de ambiente, o foo é de fato o nome da variável de ambiente e assim vamos poder usá-la na sequência, e o /bar que é a informação, o conteúdo dessa variável.

Seguindo essa lógica podemos usar essa variável em algumas instruções, como por exemplo a instrução ADD, que podemos usar da seguinte forma:

ADD . $foo

Ou então:

ADD . ${foo}

As instruções que suportam as variáveis de ambiente no Dockerfile são:

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR
  • ONBUILD (quando combinado com uma das instruções suportadas acima)

Isso segundo a própria documentação.

Outra referência de como usar as variáveis de ambiente no Dockerfile e também no comando para criação de containers.

Espero ter ajudado!

solução!

Na verdade minha dúvida era como pegar um valor de fora via docker run e usá-lo dentro do dockerfile. É só fazer algo assim

FROM node:latest
LABEL maintainer=Dênis
ENV PORT=3000
ARG FOLDER_EXPECTED
COPY . $FOLDER_EXPECTED
WORKDIR /$FOLDER_EXPECTED
RUN npm install
ENTRYPOINT npm start
EXPOSE $PORT

Com o comando docker run assim

docker run -d -p 8080:3000 -e "FOLDER_EXPECTED=/var/www"  --name=docker-estudo  schimidt/estudodocker