Localhost 不将请求转发到 Oracle Docker 容器
Localhost doesn't forward requests to Oracle Docker container
我正在尝试从 Vagrant 切换到 Docker(现在回去太晚了)。
我已经删除了我的 Oracle Vbox,并且我有:
- 已为 Mac
安装 Docker
- 拉sath89/oracle-12c
- 已按照 https://hub.docker.com/r/sath89/oracle-12c/
上的说明进行操作
所以我使用这个命令创建了 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 是 运行 ),当它全部初始化后,您将能够直接从您的本地主机访问它。
我正在尝试从 Vagrant 切换到 Docker(现在回去太晚了)。
我已经删除了我的 Oracle Vbox,并且我有:
- 已为 Mac 安装 Docker
- 拉sath89/oracle-12c
- 已按照 https://hub.docker.com/r/sath89/oracle-12c/ 上的说明进行操作
所以我使用这个命令创建了 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>
.
切换到 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 是 运行 ),当它全部初始化后,您将能够直接从您的本地主机访问它。