docker-compose不会覆盖dockerfile环境变量

Chr*_*gge 7 docker docker-compose

我试图从我的docker-compose设置基本的postgres信息.容器启动但Dockerfile运行时不会覆盖来自的变量docker-compose up.请帮忙.

FROM mine/debian7

## START: UPDATES & INSTALLS ###########################################################################################
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list.d/pgdg.list && \
    wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | apt-key add -  && \
    apt-get update && \
    apt-get upgrade && \
    apt-get install -y python-software-properties software-properties-common postgresql-9.4 postgresql-client-9.4 postgresql-contrib-9.4 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
## END: UPDATES & INSTALLS #############################################################################################

ENV DB_USER_NAME test
ENV DB_PASSWORD test
ENV DB_NAME test

## START: CONCFIGURATION ###############################################################################################
# start postgres at boot
#RUN     echo "/etc/init.d/postgresql start" >> ~/.bashrc
USER    postgres
RUN /etc/init.d/postgresql start && \
    psql --command "CREATE USER $DB_USER_NAME WITH SUPERUSER PASSWORD '$DB_PASSWORD';" && \
    createdb -O $DB_NAME $DB_NAME
RUN     echo "host all  all    0.0.0.0/0  md5" >> /etc/postgresql/9.4/main/pg_hba.conf
RUN     echo "listen_addresses='*'" >> /etc/postgresql/9.4/main/postgresql.conf
VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
#USER root
#RUN update-rc.d postgresql defaults
## END: CONCFIGURATION #################################################################################################


EXPOSE 5432

CMD service postgresql start && tail -f /var/log/postgresql/postgresql-9.4-main.log
Run Code Online (Sandbox Code Playgroud)

还有我的docker-compose文件:

tomcat:
  image: clegge/tomcat
  ports:
    - "8080:8080"
  volumes:
    - sample.war:/opt/tomcat7/webapps/sample.war

postgres:
  build: /Users/clegge/Dockers/docker-postgres-base/
  ports:
    - "5432:5432"
  stdin_open: true
  tty: true
  environment:
   - DB_USER_NAME=legge_crud
   - DB_PASSWORD=legge_crud
   - DB_NAME=test
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Sal*_*èse 10

是的@Lie Ryan指出那里有一个官方的 postgres图像。尽管如此,问题/问题没有得到解决,这是......

docker-compose 不覆盖 Dockerfile 环境变量

我现在打算解决这个问题。

不要使用ENVARG用于您预期的行为。

ARG据可查

例如...

- Dockerfile

ARG NODE_ENV=production # This will default to "production"
Run Code Online (Sandbox Code Playgroud)

- docker-compose.yaml

build:
  context: "../path-to-Dockerfile-folder"
  args: [ "NODE_ENV=development" ]
Run Code Online (Sandbox Code Playgroud)

这样,NODE_ENV将在运行时进行开发docker-compose up


h3n*_*rik 9

DockerfileRUN语句中使用那些环境变量.这些是在构建图像在构建期间执行的.

使用docker run它启动容器时,只需根据刚刚构建的图像启动容器.此时的图像已存在,并且RUN不再执行语句.

因此,在运行时设置这些环境变量将不起作用.


Nic*_*ico 6

在 Dockerfile 中你应该有:

ENV DB_USER_NAME=${DB_USER_NAME}
ENV DB_PASSWORD=${DB_PASSWORD}
ENV DB_NAME=${DB_NAME}
Run Code Online (Sandbox Code Playgroud)

然后将使用 docker-compose.yml 中的值,并且当您希望 Dockerfile 中存在一些默认值时,您可以执行此技巧

Dockerfile:

ARG DB_USER_NAME=test
ARG DB_PASSWORD=test
ARG DB_NAME=test

ENV DB_USER_NAME=${DB_USER_NAME}
ENV DB_PASSWORD=${DB_PASSWORD}
ENV DB_NAME=${DB_NAME}
Run Code Online (Sandbox Code Playgroud)

并且您的 docker-compose.yml 应该具有这些值(问题中当前的 docker-compose.yml 是正确的):

environment:
    - DB_USER_NAME=legge_crud
    - DB_PASSWORD=legge_crud
    - DB_NAME=test
Run Code Online (Sandbox Code Playgroud)