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

Localhost doesn't forward requests to Oracle Docker container

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

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

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

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

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

然后我打开 Kinematic 看看我是否可以找到我的容器 IP,在那里我发现我的 Docker 容器 IP 是 192.x.x.x

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

当我指定 docker ip 时,我的应用程序正在连接到 Docker:192.x.x.x

但它实际上应该是通过本地主机连接的,为什么 localhost:8080/em 不工作,为什么应用程序无法通过本地主机连接到 Docker 容器?

它对我所有的其他队友都有效,我正在使用 mac OS Sierra。

简答:

不管我在评论中怎么说,事实证明你在尝试连接到容器之前没有等待足够长的时间。显示日志以查看初始化何时完成,然后重试。

长答案:

我是这样工作的。首先,我启动了容器(为了简单起见,我只添加了 --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 分钟来初始化数据库。然后就开始工作了

原来你使用的是 Docker Machine 而不是 Docker 用于 Mac。以下是您的选择:

保留Docker台机器:

如果你想要多个 docker 环境(例如,每个项目一个),

Docker 机器很棒,但它有一个缺点,迫使你使用守护进程 ip 来连接容器,而不是只是 localhost.

不过,您可以编辑 /etc/hosts 文件,为您的 docker 守护程序 ip 添加一个别名,以便于使用。

可以通过 docker-machine env <your_env>.

找到守护程序 IP

切换到 Docker Mac:

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

基本上,Docker 机器(Docker 工具箱)和 Docker for Mac 可以共存。您是否真的要保留 Docker 机器取决于您。 Docker for Mac 将使用 Docker machine default env 作为其唯一的环境,可由 localhost.

访问

在这种情况下,在 default env 上启动您的 oracle 容器(即打开一个新的 bash 会话一次 Docker 对于 Mac 是 运行 ),当它全部初始化后,您将能够直接从您的本地主机访问它。