【发布时间】:2018-09-25 08:26:50
【问题描述】:
我想使用 docker 容器来模拟我的生产环境,所以我将 db 和服务器安装在同一个容器中,而不是各自安装。
这是我的 dockerfile:
FROM debian
RUN apt update
RUN apt install postgresql-9.6 tomcat8 tomcat8-admin -y
RUN service postgresql start
RUN service postgresql status # says postgres is down
RUN su - postgres ;
RUN createdb db_example # fails !!!
RUN psql -c "CREATE USER springuser WITH PASSWORD 'test123';"
RUN exit
RUN service tomcat8 start
COPY target/App-1.0.war /var/lib/tomcat8/webapps/
CMD ["/bin/bash"]
问题是数据库已关闭,因此我无法创建用户和数据库。
如果我启动一个 debian docker 容器并手动执行此步骤,一切正常。
感谢您的帮助
【问题讨论】:
-
不建议在一个图像中包含多个服务以及在可写层中为数据库持久化数据。你能解释一下你为什么要部署吗?
-
我想模拟生产环境,那里是这样弄的。
-
你在生产环境中有postgresql和tomcat服务器在同一个镜像中?还是只是postgresql和tomcat在同一个网络?
-
在同一个虚拟机中。
-
一般情况下,我们会尽可能地保留较薄的图像。可能有其他等价物来模拟其他环境。在您的情况下,postgresql 和 tomcat 在同一个虚拟机中。也许 --net 标志对于值主机就足够了,这意味着在执行 'docker run' 时添加'--net=host'。使用此标志,两个容器将在同一个网络命名空间中工作。如果您仍然想让它们在相同的 CPU/内存组中工作,docker 可能是您需要的最后一个工具。由于 docker 以相反的方式工作。它提供了孤立的环境,并且擅长于此。
标签: postgresql docker dockerfile postgresql-9.6