如何从我的笔记本电脑运行sqlplus并连接到使用docker-compose启动的dockerized oracle?

问题描述 投票:0回答:1

我正在尝试针对Oracle数据库设置自动化集成测试,计划使用https://www.testcontainers.org/在我的docker-compose.yml中启动容器。

我已经成功地使Dockerized Oracle在笔记本电脑上运行使用以下说明:https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/12212-oradb-wlsstore

步骤是:

# see https://docs.oracle.com/cd/E37670_01/E75728/html/oracle-registry-server.html
docker login container-registry.oracle.com  # supply your oracle credentials as described above

docker network create -d bridge SampleNET

cat > env.txt <<EOF
DB_SID=InfraDB
DB_PDB=InfraPDB1
DB_DOMAIN=us.oracle.com
DB_BUNDLE=basic
EOF

docker run -d --name InfraDB --network=SampleNET -p 1521:1521 -p 5500:5500 --env-file env.txt -it --shm-size="8g"  store/oracle/database-enterprise:12.2.0.1

在一分钟后,当我发出命令“ sudo docker ps -a”时,我看到数据库已经建立并且运行良好。

CONTAINER ID        IMAGE                                       COMMAND                  
6a276a311b2e        store/oracle/database-enterprise:12.2.0.1   "/bin/sh -c '/bin/ba…"   

CREATED             STATUS                        PORTS                             
2 minutes ago       Up 2 minutes (healthy)        0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   

NAMES
InfraDB

而且我现在可以运行sqlplus(从我的笔记本电脑上的shell提示符下,而不是Docker容器中运行:]

sqlplus sys/Oradoc_db1@localhost:1521/InfraDB.us.oracle.com AS SYSDBA

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 

我现在的目标是创建一个Docker compose文件,该文件可让我与Dockerized的命令行调用实现的功能相同甲骨文这是我尝试过的docker-compose.yml文件:

version: '2'
services:
  database:
    image: store/oracle/database-enterprise:12.2.0.1
    ports:
      - 1521:1521
      - 8080:8080
      - 5500:5500
    environment:
      - DB_SID:InfraDB
      - DB_PDB:InfraPDB1
      - DB_DOMAIN:us.oracle.com
      - DB_BUNDLE:basic
networks:
  default:
    external:
      name: SampleNET

所以,有了这个docker compose文件,我可以在运行我的Oracle DB并运行sqlplus的容器:

container=`sudo docker ps -a | grep oracle | sed -e's/\s.*//'`

sudo docker exec -t -i $container bash

# SESSION INSIDE DOCKER CONTAINER:
[oracle@8f26f224db03 /]$ sqlplus sys/Oradoc_db1  AS SYSDBA

                        SQL*Plus: Release 12.2.0.1.0 Production on Tue Mar 3 02:44:03 2020
                        Copyright (c) 1982, 2016, Oracle.  All rights reserved.

现在,百万美元的问题:

我将指定sqlplus命令的语法是什么从我的笔记本电脑连接(即,不要在运行数据库服务器的容器)?

以下是我尝试过的许多变体中的一些(注意:我尝试使用localhost,127.0.0.1和我笔记本电脑的实际IP):

sqlplus sys/Oradoc_db1@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=InfraDB)))'

sqlplus sys/Oradoc_db1@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=InfraDB.us.oracle.com)))'

诊断注释:

我正在Mac上运行Docker。启动Docker化的Oracle之后,我确实在docker撰写配置正在转发的端口上看到了侦听器,如下所示:

sudo lsof -i -P | grep -i "listen" | egrep "1521|8080|5500"

com.docke 6295 christopher.bedford   33u  IPv6 0xfffffffffffffff      0t0    TCP *:1521 (LISTEN)
com.docke 6295 christopher.bedford   34u  IPv6 0xfffffffffffffff      0t0    TCP *:5500 (LISTEN)
com.docke 6295 christopher.bedford   38u  IPv6 0xfffffffffffffff      0t0    TCP *:8080 (LISTEN)

已解决问题

由于我的朋友马特(Changos Muertos)的建议,这里总结了我为解决该问题所做的工作。

1)。不需要创建桥接网络“ SampleNET”。

2)。似乎像这样(下面)内联指定环境变量不起作用

  environment:
  - DB_SID:InfraDB
  - DB_PDB:InfraPDB1
  - DB_DOMAIN:us.oracle.com
  - DB_BUNDLE:basic

3)。相反,最好在“ env_file”配置选项引用的文件中定义这些环境设置,如下所示。该文件位于/tmp/docker-compose.yml

version: '2'
services:
  database:
    image: store/oracle/database-enterprise:12.2.0.1
    ports:
      - 1521:1521
      - 8080:8080
      - 5500:5500
    env_file:
      - e2.txt

并且env文件的内容位于同一目录(/tmp/e2.txt,并且具有以下内容:

DB_SID=InfraDB
DB_PDB=InfraPDB1
DB_DOMAIN=us.oracle.com
DB_BUNDLE=basic

要运行我做

   docker-compose -f /tmp/docker-compose.yml up

然后我可以通过以下方式连接(从笔记本电脑开始是最初的目标):

    sqlplus sys/[email protected]:1521/InfraDB.us.oracle.com as SYSDBA
oracle docker docker-compose sqlplus
1个回答
0
投票

这取决于一些因素,例如网络类型,以及端口是否正确转发。然后在主机上进行验证(在linux'netstat -tlpn'中),这将向您显示它是否在端口上侦听,以及侦听什么接口和协议。该工具可能因主机操作系统而异。

[一旦您看到它通过tcp侦听(不仅限于tcp6),并且主机上的防火墙已打开,您可以组合该信息以创建连接字符串。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.