我在设置docker映像时遇到了一些问题,该映像最终将用于bitbucket管道,以便为我从事的一些API项目运行测试。
我们本地开发人员的设置非常简单,在机器上运行Java 8 Maven PostgreSQL 9.6。
要运行集成测试,必须运行数据库。maven构建的一部分在服务器上创建必要的数据库和表。
我试图在docker映像上复制它,这是我到目前为止所拥有的。
FROM maven:3.5.3-jdk-8-slim
#Install postgresql
RUN apt update && \
mkdir -p /usr/share/man/man1 &&\
mkdir -p /usr/share/man/man7 &&\
apt install -y postgresql-9.6
#Update config
RUN echo "host all all 127.0.0.1/32 trust" >> /etc/postgresql/9.6/main/pg_hba.conf
#Start server
RUN service postgresql start
#Create readonly role for DB
USER postgres
RUN psql -c "CREATE ROLE readonly"
如果我通过first run在容器内手动运行这些步骤,则这些步骤似乎工作得很好:
docker run -it maven:3.5.3-jdk-8-slim /bin/bash
但当我尝试构建形象时,我得到的是:
▶ docker build -t pipelines .
Sending build context to Docker daemon 2.048kB
Step 1/6 : FROM maven:3.5.3-jdk-8-slim
---> 25f97112c73f
Step 2/6 : RUN apt update && mkdir -p /usr/share/man/man1 && mkdir -p /usr/share/man/man7 && apt install -y postgresql-9.6
---> Using cache
---> 5fa381f73c9d
Step 3/6 : RUN echo "host all all 127.0.0.1/32 trust" >> /etc/postgresql/9.6/main/pg_hba.conf
---> Using cache
---> 0721966e7749
Step 4/6 : RUN service postgresql start
---> Using cache
---> 9ca8e7a270e0
Step 5/6 : USER postgres
---> Using cache
---> 50a99c6cac20
Step 6/6 : RUN psql -c "CREATE ROLE readonly"
---> Running in 572b2b8fa754
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
The command '/bin/sh -c psql -c "CREATE ROLE readonly"' returned a non-zero code: 2
我读过一些关于这意味着容器试图访问主机上的端口,而不是容器的内容。但我无法理解手动运行命令和让Dockerfile“运行”命令之间的区别。
我还尝试过从postgres: 9.6
基础映像构建它,然后安装java maven,但当我需要在DB上创建角色时,问题是一样的。
我在这里做错了一些事情,因为我的意图是在bitbucket管道上使用它。
在构建映像时使用RUN
,例如安装后缀。每个RUN
都在之前的RUN
指令之上构建了一个层。
当您想默认执行命令时,当您运行映像(创建容器)时,请使用CMD
。因此,当您在容器中运行该命令时,该命令相当于Dockerfile中的CMD
。
我建议使用一个脚本来运行您的命令,作为<code>入口点,<code>表,<code>插入测试数据 覆盖了以前的<code>命令。
docker文件中只能有一条CMD指令。如果您列出了多个CMD,则只有最后一个CMD会生效。
我也鼓励你阅读这个解释RUN、CMD和ENTRYPOINT的答案。
总结
RUN
指令在映像构建期间实际运行命令
< code>CMD指令在构建时不执行,它在容器启动时执行,除非用户提供命令
问题内容: 有一种简单的方法可以将hibernate设置为对每个带有postgres的表使用不同的主键ID。我试图在数据源中使用postgres方言: 但这是行不通的。谢谢 问题答案: 简短的答案是没有,没有 简单的 方法可以做到这一点。但是,我找到了一种有效的解决方案。基本上,您需要实现自定义方言。这是一个实现(请在注释中注明实现的原始来源)。 上述实施应当存储为下你的Grails项目中。 接下
问题内容: 我在PostgreSQL数据库中创建了一个函数,希望使用JPA 2.1的StoredProcedureQuery方法调用该函数。 这是我的PostgreSQL查询: 这只是一个简单的查询,可以计算特定日期的用户。这只是一个演示查询,用于测试StoredProcedureQueries的工作方式。实际上,当仅通过postgreSQL使用时,它就可以正常工作。 现在,让我们尝试使用JPA
问题内容: 我已经使用Angular 2 CLI构建了Angular 2项目,并能够使用本教程将应用程序部署到Heroku 。 现在,我想为应用程序的不同环境(开发,登台,生产等)创建管道。 在我的package.json中,它将创建我的代码的生产版本,我的应用程序将在此版本上运行。有没有一种方法可以根据我在Heroku设置中的设置进行更改?例如,它将针对开发环境或登台环境。还是我需要以其他方式设
在reactor Netty之前,我将创建Netty Tcp服务器的方式是创建服务器引导并添加我的自定义管道类。Reactor-Netty有tcpServer.create(),但似乎我必须创建一个新的函数接口,它接受NettyInbound和NettyOutbound并返回一个Mono。但是,如果我想添加一个构建管道的ChannelInitializer,我必须阻塞以获得NettyContext
我正在编写一个脚本,它查询一些设备并将数据写入PostgreSQL数据库。
问题内容: 在Go模板中,有时将正确的数据传递到正确的模板的方式令我感到尴尬。用流水线参数调用模板看起来就像只用一个参数调用函数。 假设我有一个Gophers网站,有关Gophers。它具有一个主页主模板和一个用于打印Gophers列表的实用程序模板。 http://play.golang.org/p/Jivy_WPh16 输出: 现在,我想在子模板中添加一些上下文:在列表内以不同的方式设置名称“