Been struggling connecting a PHP site to a remote DB2 database for the last three days in a docker-compose project I'm working on. I keep getting Connection failed:
Error: 58031
[IBM][CLI Driver] SQL1031N The database directory cannot be found on the indicated file system. SQLSTATE=58031 SQLCODE=-1031
Here's my docker-compose setup:
# /docker-compose.yml
---
version: '3.8'
services:
web:
container_name: nginx
depends_on:
- db2
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/nginx.conf
- ./app:/app
links:
- php
- db2
php:
container_name: php
build:
context: .
dockerfile: PHP.Dockerfile
volumes:
- ./app:/app
links:
- db2
db2:
container_name: db2.rn.dk
image: ibmcom/db2:latest
hostname: db2.rn.dk
privileged: true
ports:
- "50000:50000"
environment:
- DB_NAME=testdb
- DB_USER=db2inst1
- DB_PASSWORD=ChangeMe!
- LICENSE=accept
## Creates the database DB_NAME, if its not exists
- STARTUP_MODE=createIfNotExists
- DB_CREATE_SCRIPT=create_wdemo.sql
## loads an old backup of DB_NAME,
## if the dabase DB_NAME does not exist
# - STARTUP_MODE=restoreIfNotExists
# - DB_BACKUP=wdemo.tar.gz
volumes:
- './data/db2:/database'
And the PHP.dockerfile:
FROM php:fpm
RUN apt-get update -qq > /dev/null && \
apt-get install unzip
RUN pecl install xdebug && docker-php-ext-enable xdebug
# Documentation
# https://www.ibm.com/docs/en/db2/11.5?topic=dsd-installing-data-server-driver-odbc-cli-software-linux-unix-operating-systems
# https://www.ibm.com/docs/en/db2/11.5?topic=environment-configuring
# https://stackoverflow.com/questions/37066985/php-connection-to-db2
# https://github.com/nagstaku/php_db2
# https://github.com/php/pecl-database-ibm_db2
# https://github.com/php/pecl-database-pdo_ibm
# Install DB2 php-extensions
RUN mkdir -p /opt/ibm/ && curl https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64_odbc_cli.tar.gz | tar -xz -C /opt/ibm/
# if you prefer to keep the file locally, download it and use:
## set env vars needed for PECL install
ENV IBM_DB_HOME=/opt/ibm/clidriver
ENV LD_LIBRARY_PATH=/opt/ibm/clidriver/lib
# ENV IBM_DB_HOME=/opt/ibm/dsdriver
# ENV LD_LIBRARY_PATH=IBM_DB_HOME/lib
## install ibm_db2 drivers
RUN pecl install ibm_db2 pdo_ibm
RUN echo "extension=ibm_db2.so" > /usr/local/etc/php/conf.d/ibm_db2.ini
RUN echo "extension=ibm_db2.so" >> /usr/local/etc/php/php.ini
RUN echo "extension=pdo.so" >> /usr/local/etc/php/php.ini
RUN echo "extension=pdo_ibm.so" >> /usr/local/etc/php/php.ini
#
# RUN echo "ibm_db2.instance_name=db2inst1" >> /usr/local/etc/php/php.ini
index.php
<?php
...
$database = 'testdb';
$user = 'db2inst1';
$password = 'ChangeMe!';
$hostname = 'db2.rn.dk';
$port = 50000;
$conn_string =
"DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$conn = db2_connect($conn_string, '', '');
if ($conn) {
echo "Connection succeeded.\n";
db2_close($conn);
} else {
echo "<p><b>Using ibm_db2 extension:</b></p>";
echo "<p><u>Connection failed:</u></p>";
echo "<p>Error: ".db2_conn_error()."<br />";
echo db2_conn_errormsg()."</p>";
}
?>
Is there something I'm missing regarding the setup, that isn't documented anywhere?
Best regards, Thomas