mr *_*ven 7 php postgresql codeigniter docker
我对 Docker 非常陌生,并用它进入了我的第一个真正的项目。我们有一个使用 Codeigniter 和 PostgreSQL 的 php 应用程序,它运行良好。现在我正在尝试对它进行 dockerize,但在使用 pdo_pgsql 驱动程序时遇到了一些麻烦。
我在网上找到了一些帮助来安装 pdo_pgsql 驱动程序,但是对于 php-5x 来说,这都是过时的解决方案。我似乎工作,因为我检查了 phpinfo 页面并且我的 php.ini 已正确加载并说 pdo_pgsql 和 pgsql 驱动程序都已安装并处于活动状态???
这是错误:
奇怪的是,当我第一次点击页面时,我只收到第一个错误。然后,如果我刷新页面,则会出现第二个错误。
当我登录到容器中,并cd以它说文件不存在的目录,我可以清楚地看到pdo.so,pdo_pgsql.so和pgsql.so。
遇到错误
您在 config/database.php 文件中指定了无效的数据库连接组 (dockerize)。
遇到 PHP 错误
严重性:核心警告
消息:PHP 启动:无法加载动态库 '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/pgsql' - /usr/local/lib/php/extensions/no-debug- non-zts-20160303/pgsql:无法打开共享对象文件:没有那个文件或目录
文件名:未知
这是Dockerfile:
# Dockerfile
FROM php:7.1.12-apache
MAINTAINER Me <me@myself.com>
COPY deploy/config/php.ini /usr/local/etc/php/
COPY target/myapp.tar.gz /var/www/html
RUN apt-get update
# Install Postgre PDO
RUN apt-get install -y libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo pdo_pgsql pgsql
RUN tar -xzf /var/www/html/myapp.tar.gz \
&& cd /var/www/html \
&& rm -f myapp.tar.gz \
&& OLD_URL='http://localhost:8080' \
&& NEW_URL='http://dockerhost:8080' \
&& sed -i -e "s#$OLD_URL#$NEW_URL#" "/var/www/html/application/config/config.php"
EXPOSE 80
EXPOSE 443
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml:
version: "3"
services:
app:
image: me/myapp:v1
build: .
ports:
- "8080:80"
- "8043:443"
postgres:
image: postgres:9.6.6
ports:
- "5432:5432"
Run Code Online (Sandbox Code Playgroud)
这是我的 Codeigniter database.php:
这会尝试连接到 docker-compose 提供的另一个容器中的 Postgres,其中包含上述 yml。我读了一些地方说我只是postgres用作连接的主机,因为该docker-compose.yml文件有一个名为postgres. 这对我来说听起来有点可疑,这看起来对吗?
$active_group = "dockerize";
$query_builder = TRUE;
$db['dockerize'] = array(
'dsn' => 'pgsql:host=postgres;port=5432;dbname=mydb;user=postgres;password=postgres',
'hostname' => 'postgres',
'username' => 'postgres',
'password' => 'postgres',
'database' => 'mydb',
'dbdriver' => 'pdo',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Run Code Online (Sandbox Code Playgroud)
仅供参考:以上所有内容均已匿名并精简以提高可读性
哦,该死,我全都明白了。所以我上面的一切都有效。Docker 的缓存方式发生了一些奇怪的事情。我猜我没有正确更新图像。我只是删除了所有容器和图像,然后重建并运行了所有内容,它就神奇地工作了。在此过程中,某些目录和文件还存在一些权限问题。
希望上面的片段对某人有所帮助,关于带有 pdo_pgsql 的 dockers php-apache 映像的文档并不多。
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |