- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试扩展 postgres Docker图像可能(通过环境变量标志)在 DB init 上执行 flyway DB 迁移。我的 Dockerfile 在这里:
FROM postgres:9.6
# Install curl and java (for Flyway)
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl openjdk-8-jre
# Install Flyway
ENV FLYWAY_VERSION 4.2.0
ENV FLYWAY_INSTALL_DIR /usr/src/flyway
ENV FLYWAY_CONF ${FLYWAY_INSTALL_DIR}/flyway-${FLYWAY_VERSION}/conf/flyway.conf
ENV FLYWAY_EXE ${FLYWAY_INSTALL_DIR}/flyway-${FLYWAY_VERSION}/flyway
RUN mkdir -p ${FLYWAY_INSTALL_DIR} && \
curl -L https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/${FLYWAY_VERSION}/flyway-commandline-${FLYWAY_VERSION}.tar.gz | \
tar -xzC ${FLYWAY_INSTALL_DIR} && \
chmod +x ${FLYWAY_EXE}
# Copy migration scripts
ENV MIGRATIONS_LOCATION /flyway/migrations
COPY migrations $MIGRATIONS_LOCATION
COPY init_db.sh /docker-entrypoint-initdb.d/init_db.sh
使用我的 init_db.sh
启动脚本:
#!/bin/bash
set -e
RUN_MIGRATIONS="${RUN_MIGRATIONS:-false}"
DB_URL="jdbc:postgresql://localhost:5432/$DB_NAME"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE $DB_NAME;
EOSQL
if [ "$RUN_MIGRATIONS" == "true" ]; then
echo "running migrations ..."
${FLYWAY_EXE} -user=$POSTGRES_USER -password=$POSTGRES_PASSWORD -url=$DB_URL -locations="filesystem:$MIGRATIONS_LOCATION" migrate
fi
但是,当使用 RUN_MIGRATIONS=true
运行容器时,flyway 无法连接到 postgres:
docker build . -t postgres-flyway && docker run -e DB_NAME=db -e RUN_MIGRATIONS=true -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres postgres-flyway
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgresql/data -l logfile start
waiting for server to start....LOG: database system was shut down at 2018-08-06 02:19:32 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
done
server started
ALTER ROLE
/usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/init_db.sh
CREATE DATABASE
running migrations ...
Flyway 4.2.0 by Boxfuse
ERROR:
Unable to obtain Jdbc connection from DataSource (jdbc:postgresql://localhost:5432/db) for user 'postgres': Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08001
Error Code : 0
Message : Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
postgres 图像在端口 5432 上运行 postgres(像往常一样)所以我不知道为什么 flyway 无法通过 localhost:5432
连接到 postgres。
我还注意到,在此上下文中,pg_isready
声明 postgres 正在接受连接,但是当将主机名指定为 localhost
或 127.0.0.1
时它也无法到达 postgres。也就是说,通过在我的 init_db.sh
脚本中插入一些 pg_isready
命令:
...
pg_isready
pg_isready -p 5432
pg_isready -h localhost -p 5432
...
我在 postgres init 上看到以下日志输出:
...
/var/run/postgresql:5432 - accepting connections
/var/run/postgresql:5432 - accepting connections
localhost:5432 - no response
...
我怀疑我已经达到了 postgres 初始化上下文的限制,但我想了解为什么在初始化时无法通过 localhost/127.0.0.1:5432
访问 postgres .
最佳答案
在基于 postgres:10.5 图像为我的数据库创建 docker 图像时,我在运行 flyway 时遇到了同样的问题。在运行 flyway 之前,我将以下内容添加到我的 entrypoint.sh 中,以确认我看到的问题是由@Nick Maraston 在他的回答中发布的 docker-entrypoint.sh 更改引起的:
echo "$(date) - waiting for database to start"
while ! pg_isready -h localhost -p 5432 -d $POSTGRES_DB
do
echo "$(date) - waiting for database to start"
sleep 10
done
结果是上面的代码一直循环下去。然后我将其替换为以下代码以重新启动数据库以监听本地主机上的 TCP/IP 连接:
pg_ctl -D "$PGDATA" -m fast -w stop
pg_ctl -D "$PGDATA" \
-o "-c listen_addresses='localhost'" \
-w start
与其像这样重启数据库,更简洁的解决方案是使用 JDBC -socketFactory
选项解释 here .
关于postgresql - flyway 无法连接到 docker-entrypoint-initdb.d 脚本中的 postgres 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699847/
我正在 Circleci 上使用 docker-compose 来启动一个 postgres 容器,其中包含一堆安装在 /docker-entrypoint-initdb.d/ 上的 sql 文件。
我之前使用安装程序安装了 alfresco 社区版,但我的服务器最终用完了硬盘空间,一切都崩溃了。我无法运行卸载程序(出现奇怪的权限问题)。 所以我删除了整个安装文件夹并尝试重新安装。当我以 root
我是 Airflow 新手。我按照此处提供的说明进行操作:https://www.youtube.com/watch?v=SYOUbiGtGiU&t=49s 第 1 步:控制面板 |程序和功能 |打开
我刚开始使用 Airflow ,我使用了命令:airflow initdb根据需要启动 Airflow 数据库。 但我偶然发现了错误:import cattr File "/home/adrienb/
根据https://hub.docker.com/_/postgres的“初始化脚本”部分,我在docker-entrypoint-initdb.d中有两个文件: init-db.sh backup.
我正在尝试初始化我的docker arangodb,但一直出现连接错误:我尝试将服务器端点更改为http + tcp:// .....,但错误仍然存在,这可能是怎么回事? docker-compo
我已在基于 oraclelinux:7.1 镜像(Docker 版本 1.12.5)的 docker 容器中安装了 Oracle 12c。不过有一个小问题。运行容器时,目录/docker-entryp
我有一个本地Openshift实例,在该实例中,我尝试使用helm安装Sentry: helm install --name sentry --wait stable/sentry。 除了Postgr
我在 postgres 后端遇到 Airflow 初始化问题 Ubuntu:18.04.1 Airflow :v1.10.6 Postgres:10.10 Python 3.6 当我运行时 airfl
每当我尝试运行下面的命令时,它在 RHEL7 上总是失败。我试过另一个类似的操作系统(较新),但它不这样做,只是工作。 我查看了目录的权限,禁用了 selinux(以防万一),还查看了区域设置,但是这
如何使用 initdb 为 PostgreSQL 创建临时数据库?另外,如何使用虚拟数据填充它以及如何在使用后删除它? 我有一个完整的数据库模式。我不想一张一张地创建临时表。使用 initdb,我希望
我已经使用 EnterpriseDB 安装安装了 PostgreSQL。 我运行了 sudo ./postgresql-9.3.5-3-osx.app/Contents/MacOS/installbu
我正致力于在 Linux 系统(CentOS - RedHat - Fedora)上的 PostgreSQL 9.x 中创建一个数据库集群(单一数据库)。我已经安装了正确的 PostgreSQL 包(
我正在使用 mysql docker 容器并将初始化脚本添加到 docker-entrypoint-initdb.d 中,如下所述:https://hub.docker.com/_/mysql/ (初
我在 docker-compose.yml 中使用两个服务对一个应用程序进行 docker 化:一个是从 php:7.3.28-apache 构建的网络图像,另一个是从 postgres:11.12-
我关注 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two
我在名为 engdados 的 Anaconda 环境之一中安装了 Airflow 。当我执行命令 Airflow initdb 时,我收到以下错误:airflow initdb: cannot im
“airflow initdb”命令和“airflow resetdb”命令之间究竟有什么区别? 真的有必要有 2 个不同的命令吗? 什么时候使用一种和另一种比较合适? doc说... airflow
我按照文档安装了 Apache-airflow。 https://airflow.apache.org/docs/stable/start.html 当我执行airflow initdb时,每次都会出
生成mariadb图像时,我想执行脚本以及初始化数据库模式。 我将这些文件放在/docker-entrypoint-initdb.d下 模式初始化按预期工作 Shell脚本包含apt-get inst
我是一名优秀的程序员,十分优秀!