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 环境变量
我现在打算解决这个问题。
ENV
但ARG
用于您预期的行为。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
你Dockerfile
在RUN
语句中使用那些环境变量.这些是在构建图像时在构建期间执行的.
使用docker run
它启动容器时,只需根据刚刚构建的图像启动容器.此时的图像已存在,并且RUN
不再执行语句.
因此,在运行时设置这些环境变量将不起作用.
在 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)