Docker PHP与pdo_pgsql安装问题

我对Docker非常陌生,并且踏入了我的第一个真正的项目。 我们有一个使用Codeigniter和PostgreSQL的php应用程序,效果很好。 现在我试图dockerize它,我遇到了pdo_pgsql驱动程序的一些麻烦。

我在网上find了一些帮助来获得pdo_pgsql驱动程序来安装,但它是所有php-5x的过时的解决scheme。 我似乎工作,因为我检查了phpinfo页面,我的php.ini正确加载,并说pdo_pgsql和pgsql驱动程序都安装和活动?

这是错误:

奇怪的是,当我第一次打网页时,我只得到第一个错误。 然后,如果我刷新页面第二个错误显示。

当我login到容器,并cd到它所说的文件不存在的目录时,我可以清楚地看到pdo.sopdo_pgsql.sopgsql.so

遇到错误

你已经在config / database.php文件中指定了一个无效的数据库连接组(dockerize)。

遇到一个PHP错误

严重性:核心警告

消息:PHP启动:无法加载dynamic库'/ usr / local / lib / php / extensions / no-debug-non-zts-20160303 / pgsql' – / usr / local / lib / php / extensions / no-debug-非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 

这是我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" 

这是我的Codeigniter database.php

这将尝试连接到Docker提供的另一个容器中的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 ); 

fyi:以上所有内容都是匿名的,并且为了便于阅读而减less

哦,我觉得这一切。 所以我上面的所有东西都行得通。 Docker的caching方式发生了一些奇怪的事情。 我没有正确地更新图像我猜。 我只是删除所有的容器和图像,然后重build和运行它,这只是神奇的工作。 一路上还有一些特定的目录和文件的权限问题。

希望上面的剪辑帮助某人,有没有很多的Docker PHP-Apache的图像与pdo_pgsql的文档。