Dockerize Angular приложение, которое использует Python и Oracle в качестве серверной части

#python #angular #docker #nginx #docker-compose

#python #angular #docker #nginx #docker-compose

Вопрос:

Я пытаюсь настроить свое приложение angular, которое вызывает серверную базу данных Oracle из моего приложения python. Без docker я могу обслуживать свое приложение на порту 4201, а мой серверный сервер работает на порту 2232. Все это работает нормально, но когда я пытаюсь это документировать, я, кажется, получаю ошибку COR. Я не уверен, чего мне не хватает.

Python dockerfile:

 FROM python:3
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
ADD thomas.py /
CMD [ "python3", "./thomas.py" ]

 

Angular Dockerfile:

 # Stage 1
FROM node:12.16.1-alpine as build-step
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build --prod
# Stage 2
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-step /usr/src/app/dist/bim-angulardashboard/ /usr/share/nginx/html
 

Файл Nginx.conf:

 worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    gzip              on;
    gzip_http_version 1.0;
    gzip_proxied      any;
    gzip_min_length   500;
    gzip_disable      "MSIE [1-6].";
    gzip_types        text/plain text/xml text/css
                      text/comma-separated-values
                      text/javascript
                      application/x-javascript
                      application/atom xml;


    # Configuration for the server
    server {
        listen 80;
        server_name localhost;

      location / {
          root   /usr/share/nginx/html;
          index  index.html;
          expires -1;
          default_type application/javascript;
          add_header Pragma "no-cache";
          add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
          try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
      }

      location /api {
            proxy_pass          http://<my_vm_server_name>:5000;
            proxy_set_header        Host $host;
      }
    }
}
 

Docker-compose.yml файл:

 version: '3'
services:
  python-app:
    build:
      context: ./docker/flask
      dockerfile: Dockerfile #this is your dockerfile
    container_name: python-app #docker container name
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /
    ports:
      - "5000:5000" #binding ports, external port : application listening port
    volumes:
      - ./in000031-batch_dashboard/docker/flask/:/var/www/html # after : its the location in the container OS
    networks:
      app-network:
        ipv4_address: 172.20.0.2
  angular-app:
    build:
      context: .
      dockerfile: Dockerfile #this is your dockerfile
    container_name: angular-app #docker container name
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /
    ports:
      - "4201:80" #binding ports, external port : nginx listening port
    volumes:
      - ./in000031-batch_dashboard/:/var/www/html # after : its the location in the container OS
    networks:
      app-network:
        ipv4_address: 172.20.0.3
  

#Docker Networks
networks:
  app-network:
    driver: bridge
    ipam:
      driver: default
      config:
          - subnet: 172.20.0.0/16
#Volumes
volumes:
  dbdata:
    driver: local  
 

Пожалуйста, дайте мне знать, если какие-либо из моих конфигурационных файлов неверны или у вас есть лучшее решение? Любая помощь будет оценена. Спасибо

Комментарии:

1. Установили ли вы драйверы, необходимые для подключения к вашей базе данных oracle в вашем образе docker? Выполнили ли вы шаги, перечисленные на сайте, приведенном в конце трассировки стека?

2. Я бы отредактировал ваш вопрос так, чтобы либо а) отразить ошибку, отображаемую в вашем stacktrace (ошибка подключения к Oracle DB), и добавить stacktrace в виде фрагмента кода, а не изображения, либо б) показать сведения об ошибке для ошибки CORS, которую вы видите

3. Ошибка говорит, что вам не хватает библиотеки… и в вашем вопросе ничего не упоминается о библиотеках oracle. Мы не знаем, что вы сделали или проверили, вы должны включить это в свой вопрос.

4. @C.Nivs, теперь я добавил скриншот ошибки COR. И да, я установил необходимые драйверы для Oracle_cx на моей виртуальной машине Linux, которую я использую. Без docker он подключается к базе данных, и я вижу результат, но, запуская его в docker, я получаю вышеуказанные ошибки.

5. Первая попытка в Google показала мне это: blogs.oracle.com/opal /…

Ответ №1:

Похоже, что существует проблема с подключением к Python и Oracle DB. Как устанавливается Oracle db? Это также служба docker или размещено где-то еще?

Убедитесь, что вы указали правильное имя службы Oracle db / ip-адрес для подключения к базе данных.

Комментарии:

1. без docker я использовал шаги по ссылке для установки Oracle_cx, и я смог нормально запустить свое приложение. Но когда я запускаю его в docker, должен ли я снова установить Oracle_cx в docker перед запуском контейнеров?