Not able to connect PHP application to db2 database on remote server

Viewed 51

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

0 Answers
Related