我有以下 dockerfile(已省略):
FROM postgres:latest
1 ARG VERSION
2
3 # install clojure
4 RUN apt-get update
5 RUN apt-get -y install curl
6 RUN curl -O https://download.clojure.org/install/linux-install-1.10.3.933.sh
7 RUN chmod +x linux-install-1.10.3.933.sh
8 RUN ./linux-install-1.10.3.933.sh
9
10 # postgres
11 RUN apt-get -y install sudo
12 USER postgres
13 RUN initdb
14 RUN postgres -D /var/lib/postgresql/data
15
16 RUN psql -f bin/sql/postgres-db.sql -U postgres
17 RUN psql -f bin/sql/postgres-table.sql -U postgres -d datomic
18 RUN psql -f bin/sql/postgres-user.sql -U postgres -d datomic
但是在第 14 行运行命令后,docker 容器停止执行其余命令,这些命令应该在 postgres -D 命令处于活动状态时手动在另一个 shell 中运行。如何在后台运行 postgres 命令?
我尝试 & 在第 14 行的末尾在后台发送它,但得到这个:
[+] Building 4.4s (14/25)
=> [internal] load build definition from Dockerfile_db 0.0s
=> => transferring dockerfile: 1.29kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/postgres:latest 3.7s
=> [internal] load build context 0.0s
=> => transferring context: 175B 0.0s
=> [ 1/21] FROM docker.io/library/postgres:latest@sha256:6647385dd9ae11a 0.0s
=> CACHED [ 2/21] RUN apt-get update 0.0s
=> CACHED [ 3/21] RUN apt-get -y install curl 0.0s
=> CACHED [ 4/21] RUN curl -O https://download.clojure.org/install/linux 0.0s
=> CACHED [ 5/21] RUN chmod +x linux-install-1.10.3.933.sh 0.0s
=> CACHED [ 6/21] RUN ./linux-install-1.10.3.933.sh 0.0s
=> CACHED [ 7/21] RUN apt-get -y install sudo 0.0s
=> CACHED [ 8/21] RUN initdb 0.0s
=> [ 9/21] RUN postgres -D /var/lib/postgresql/data & 0.3s
=> ERROR [10/21] RUN psql -f bin/sql/postgres-db.sql -U postgres 0.4s
------
> [10/21] RUN psql -f bin/sql/postgres-db.sql -U postgres:
#13 0.367 psql: error: could not connect to server: No such file or directory
#13 0.367 Is the server running locally and accepting
#13 0.367 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
------
executor failed running [/bin/sh -c psql -f bin/sql/postgres-db.sql -U postgres]: exit code: 2
来自Postgres DockerHub 页面部分初始化脚本。
如果您想在从该镜像派生的镜像中进行额外的初始化,请在 /docker-entrypoint-initdb.d 下添加一个或多个 *.sql、*.sql.gz 或 *.sh 脚本(如有必要,创建目录)。在入口点调用 initdb 创建默认的 postgres 用户和数据库后,它将运行任何 *.sql 文件,运行任何可执行的 *.sh 脚本,并在该目录中找到任何不可执行的 *.sh 脚本以在此之前进行进一步的初始化启动服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句