具有postgresql和java的bitbucket管道的Docker如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (47)

我们本地开发人员的设置非常简单,在机器上运行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"

如果通过第一次运行手动在容器中运行它们,这些步骤看起来工作得很好:

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

尝试从postgres:9.6基础图像构建它,然后安装java + maven,但是当我需要在数据库上创建角色时,问题是相同的。

提问于
用户回答回答于

RUN 指令实际上在图像构建期间运行该命令

CMD指令不会在执行完成之后执行,除非用户提供命令,否则它将在容器启动时执行

扫码关注云+社区

领取腾讯云代金券