Localhost不会将请求转发到Oracle Docker容器

时间:2016-12-16 16:10:45

标签: oracle docker docker-machine

我正试图从Vagrant切换到Docker(现在回来太晚了)。

我已经删除了我的Oracle Vbox,我有:

所以我使用这个命令创建了Docker容器:

docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c

然后我尝试使用无法访问的localhost:8080/em设置用户/权限等。

然后我打开Kinematic,看看能否找到我的容器IP,我发现我的Docker容器IP是192.x.x.x

我能够登录到192.x.x.x:8080 / em并设置我需要设置的内容。

当我指定docker ip:192.x.x.x

时,我的应用程序正在连接到Docker

但它应该通过localhost真正连接,为什么localhost:8080 / em无法正常工作?为什么应用程序无法通过localhost连接到Docker容器?

它适用于我所有的其他队友,我正在使用mac OS Sierra。

2 个答案:

答案 0 :(得分:3)

简短回答

尽管我在评论中说过,但事实证明你在尝试连接容器之前没等多久。显示日志以查看init何时完成,然后重试。

答案很长

我这样做了。首先,我启动了容器(为了简单起见,我只添加了--name):

$> docker run -d -p 8080:8080 -p 1521:1521 --name oracle-12c sath89/oracle-12c

然后我尝试连接容器,做一个简单的事情:

$> curl http://localhot:8080
curl: (52) Empty reply from server

这不起作用,所以我显示了容器的日志:

$> docker logs -f oracle-12c

它向我展示了容器需要时间来启动,具有以下日志:

ls: cannot access /u01/app/oracle/oradata: No such file or directory
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console

PL/SQL procedure successfully completed.

Starting import from '/docker-entrypoint-initdb.d':
found file /docker-entrypoint-initdb.d//docker-entrypoint-initdb.d/*
[IMPORT] /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

Import finished

Database ready to use. Enjoy! ;)

我花了大约15分钟来启动数据库。然后它正在工作

答案 1 :(得分:0)

所以事实证明你使用Docker Machine而不是Docker for Mac。您可以选择以下选项:

保留Docker计算机

如果你想要多个docker envs(例如,每个项目一个),Docker机器很棒,但是它有一个缺点就是强迫你使用守护进程ip连接容器而不仅仅是localhost

但是,您可以编辑/etc/hosts文件以向docker守护程序ip添加别名,以便于使用。

可以使用docker-machine env <your_env>找到守护程序IP。

切换到适用于Mac的Docker

如何做到这一点在这里描述:https://docs.docker.com/docker-for-mac/

基本上,Docker机器(Docker Toolbox)和Docker for Mac都可以共存。您是否真的想要保留Docker机器取决于您。 Docker for Mac将使用Docker机器default env作为其唯一的env,可由localhost访问。

在这种情况下,在default env上启动你的oracle容器(即在Docker for Mac运行时打开一个新的bash会话),当它初始化完成后,你就可以访问它了直接来自您的localhost。