0

I am trying to create an alphine image in which I will run .NET 7 REST API that connects Oracle Database. But I am constantly in trouble with symbols. I have researched a lot of source and i changed my Docker File like that:

#Runtime Image For Run
FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
LABEL Name="SECRET"

#Oracle Basic IC 112.0.4 Setup
RUN apk --no-cache add libaio libnsl-dev libnsl libnsl-static libc6-compat gcompat curl && \
    cd /tmp && \
    curl -o instantclient-basic.zip https://github.com/unseensenpai/instantclient/releases/download/0.0.1/instantclient-basic-linux.x64-11.2.0.4.0.zip -SL && \
    unzip instantclient-basic.zip && \
    mv instantclient*/ /usr/lib/instantclient && \
    rm instantclient-basic.zip && \
    rm -rf /tmp/instantclient_11_2/ && \
    ln -s /usr/lib/instantclient/adrci /usr/lib/adrci && \
    ln -s /usr/lib/instantclient/genezi /usr/lib/genezi && \
    ln -s /usr/lib/instantclient/libclntsh.so.11.1 /usr/lib/libclntsh.so.11.1 && \
    ln -s /usr/lib/instantclient/libnnz11.so /usr/lib/libnnz11.so && \
    ln -s /usr/lib/instantclient/libocci.so.11.1 /usr/lib/libocci.so.11.1 && \
    ln -s /usr/lib/instantclient/libociei.so /usr/lib/libociei.so && \
    ln -s /usr/lib/instantclient/libocijdbc11.so /usr/lib/libocijdbc11.so && \
    ln -s /usr/lib/instantclient/uidrvci /usr/lib/uidrvci && \    
    ln -s /usr/lib/libnsl.so.3 /usr/lib/libnsl.so.1 && \
    ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \
    ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2 && \
    ln -s /usr/lib/libnsl.so.3 /usr/lib/instantclient/libnsl.so.1

# SQLPLUS 112.0.4 Setup
RUN curl -o instantclient-sqlplus.zip https://github.com/unseensenpai/instantclient/releases/download/0.0.1/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip -SL && \
    unzip instantclient-sqlplus.zip && \
    mv instantclient*/* /usr/lib/instantclient && \
    rm instantclient-sqlplus.zip && \
    rm -rf /tmp/instantclient_21_10/ && \
    ln -s /usr/lib/instantclient/libsqlplus.so /usr/lib/libsqlplus.so && \
    ln -s /usr/lib/instantclient/libsqlplusic.so /usr/lib/libsqlplusic.so && \
    ln -s /usr/lib/instantclient/sqlplus /usr/bin/sqlplus

ENV ORACLE_BASE /usr/lib/instantclient
ENV LD_LIBRARY_PATH /usr/lib/instantclient
ENV TNS_ADMIN /usr/lib/instantclient/network/admin/
ENV ORACLE_HOME /usr/lib/instantclient
ENV NLS_LANG SECRETLANGUAGE
ENV PATH="$ORACLE_HOME:$PATH"
COPY TNSNAMES.ORA /usr/lib/instantclient/network/admin/

#SDK Image For Build
FROM mcr.microsoft.com/dotnet/sdk:7.0-alpine AS build
WORKDIR /src
COPY ["NuGet.Config", "."]
COPY ["src/ApiHost/ApiHost.csproj", "src/ApiHost/"]
COPY ["src/HttpApi/HttpApi.csproj", "src/HttpApi/"]
COPY ["src/Dto/Dto.csproj", "src/Dto/"]
RUN dotnet restore "src/ApiHost/ApiHost.csproj"
COPY . .
WORKDIR /src/src/ApiHost
RUN dotnet build "ApiHost.csproj" -c Release -o /app

#SDK Image For Publish
FROM build AS publish
RUN dotnet publish "ApiHost.csproj" -c Release -o /app

#Runtime Image For Run
FROM base AS final
RUN apk add --update tzdata
ENV TZ=SECRETTZINFO
ENV MODE=PRODUCTION
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ApiHost.dll"]

When i run docker file with

docker build -f .docker\Dockerfile.staging -t stagingwebapi .
docker run -p 8084:80 --network my-bridge-network stagingwebapi

commands its working. When i try to run sqlplus command for test database connection:

/app # sqlplus
Error relocating /usr/lib/instantclient/libclntsh.so.11.1: canonicalize_file_name: symbol not found
/app #

i got this error. I have researched it a lot but cannot fix it.

Any advice? or exit path?

Unseen
  • 13
  • 5
  • The best recommendation is to try almost any other Linux distro than Alpine. [Docker for Oracle Database Applications in Node.js and Python](https://blogs.oracle.com/opal/post/part-1-docker-for-oracle-database-applications-in-nodejs-and-python) may have useful tips about Dockerfiles - but not for Alpine. – Christopher Jones May 18 '23 at 21:27
  • To narrow it down: instead of MUSL use glibc. – Lorinczy Zsigmond Jun 13 '23 at 07:20

0 Answers0