我设置了一个容器来运行elasticsearch。服务启动,但是我无法通过curl或浏览器连接到该服务。
RUN \
cd /tmp && \
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch- 1.3.2.tar.gz && \
tar xvzf elasticsearch-1.3.2.tar.gz && \
rm -f elasticsearch-1.3.2.tar.gz && \
mv /tmp/elasticsearch-1.3.2 /elasticsearch
# Define mountable directories.
VOLUME ["/data"]
# Define default command.
CMD ["/elasticsearch/bin/elasticsearch"]
EXPOSE 9200
EXPOSE 9300
连接到http://localhost:9200
没有任何效果。docker ps显示端口;
0.0.0.0:49179->9200/tcp, 0.0.0.0:49180->9300/tcp
...
net::ERR_ADDRESS_UNREACHABLE
我是否缺少一些配置值?谢谢!
[更新]我也在运行命令中尝试了-p
docker run -i -p 9200:9200 -p 9300:9300 -t --rm -P team1/image1
我测试了您的Dockerfile,但是它可以正常工作。
FROM dockerfile/java
RUN \
cd /tmp && \
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz && \
tar xvzf elasticsearch-1.3.2.tar.gz && \
rm -f elasticsearch-1.3.2.tar.gz && \
mv /tmp/elasticsearch-1.3.2 /elasticsearch
# Define mountable directories.
VOLUME ["/data"]
# Define default command.
CMD ["/elasticsearch/bin/elasticsearch"]
EXPOSE 9200
EXPOSE 9300
我尝试构建此Dockerfile并运行它。
$ docker build -t 25312935 .
$ docker run -t -p 9200:9200 -p 9300:9300 --rm 25312935
[2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] version[1.3.2], pid[1], build[dee175d/2014-08-13T14:29:30Z]
[2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] initializing ...
[2014-08-15 04:41:08,353][INFO ][plugins ] [Black Crow] loaded [], sites []
[2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] initialized
[2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] starting ...
[2014-08-15 04:41:10,547][INFO ][transport ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/172.17.0.72:9300]}
[2014-08-15 04:41:10,560][INFO ][discovery ] [Black Crow] elasticsearch/0mpczYoYSZCiAmbkxcsfpg
[2014-08-15 04:41:13,601][INFO ][cluster.service ] [Black Crow] new_master [Black Crow][0mpczYoYSZCiAmbkxcsfpg][eeb3396b1ecc][inet[/172.17.0.72:9300]], reason: zen-disco-join (elected_as_master)
[2014-08-15 04:41:13,615][INFO ][http ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.0.72:9200]}
[2014-08-15 04:41:13,615][INFO ][node ] [Black Crow] started
[2014-08-15 04:41:13,634][INFO ][gateway ] [Black Crow] recovered [0] indices into cluster_state
如下所示,请求127.0.0.1:9200
返回json响应。
$ curl 127.0.0.1:9200
{
"status" : 200,
"name" : "Black Crow",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
检查您的-p
选项。这意味着发布容器的主机端口。如果您未明确编写主机的端口,则docker如下分配随机端口。
$ docker run -t -p 9200 -p 9300 --rm 25312935
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1aa4c2c84d04 25312935:latest /elasticsearch/bin/e 15 seconds ago Up 15 seconds 0.0.0.0:49153->9200/tcp, 0.0.0.0:49154->9300/tcp sad_shockley
0.0.0.0:49153->9200/tcp
表示您可以通过主机的49153端口访问容器的9200端口。
$ curl 127.0.0.1:49153
{
"status" : 200,
"name" : "Golem",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
因此,如果您要使用主机s 9200 port, explicitly write the host port like
-p 9200:9200
or
-p 0.0.0.0:9200:9200`
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eeb3396b1ecc 25312935:latest /elasticsearch/bin/e 59 seconds ago Up 58 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp high_elion
如果仍然无法解决问题,请尝试--net=host
选择。您可以使用此选项在容器内使用主机网络堆栈。
$ docker run -t --net=host --rm 25312935
$ curl 127.0.0.1:9200
{
"status" : 200,
"name" : "Black Crow",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
如果两者都不起作用,我认为您需要检查其他网络配置。
问题内容: 主机可以打开Docker容器访问端口吗?具体来说,我在主机上运行了MongoDB和RabbitMQ,我想在Docker容器中运行一个进程以侦听队列并(可选)写入数据库。 我知道我可以将端口从容器转发到主机(通过- p选项),并可以从Docker容器中连接到外部环境(即Internet),但我不想公开RabbitMQ和MongoDB端口从主持人到外界 编辑:一些澄清: 我必须执行此技巧才
问题内容: 我在Mac OSX上使用Docker。 我有一个带有打开的守护程序的容器,正在侦听port 。 虚拟机设置为将所有计算机端口流量转发到此容器端口。 我想将我的本地主机设置为将所有流量转发到计算机端口。 我的机器在 我已经使用Apache虚拟主机配置和Proxy将本地端口8080上的所有HTTP通信转发到了计算机。 对ssh做相同的正确方法是什么? 我认为它涉及到此处提到的SSH隧道传输
端口转发(Forwarded Port)。请求访问主机(你的电脑)上的某个端口,把请求转发到虚拟机上的某个端口。比如你在虚拟机上安装了一个 Web 服务器,默认它会在虚拟机上的 80 端口提供接待服务。你可以配置一个端口转发,当访问主机上的某个端口的时候,把请求转发到虚拟机上的 80 端口。下面通过一个试验你就很容易理解这个端口转发。 端口转发配置 打开 Vagrantfile,添加一行配置代码:
我遇到的问题是,我无法在我希望看到的端口上看到应用程序。我正在公开端口8080并在8080上运行uwsgi进程,但在浏览器中找不到ip地址的应用程序。我只是得到谷歌Chrome的‘此网页不可用’。(我使用的是Mac,所以我需要获得boot2docker的ip地址)。容器显然正在运行,并报告我的uwsgi和celery进程也都成功运行。 运行时,得到的响应如下 ...因此容器似乎正在接受端口8080
我在远程VPS上的docker-compose网络中运行容器。我希望能够从我的本地主机访问在这些容器中运行的数据库。 例如,如果容器和位于VPS上的容器网络中,我希望从计算机的访问。Kubernetes的CLI允许使用。 编辑:我已经接受了Ali Tou的回答,但是,如果能看到一个不需要重新启动容器来重新配置其端口以将它们暴露到主机上的解决方案,那就太好了。 编辑2:我在一篇相关的文章https:
问题内容: 我通常会看到将Docker容器的端口暴露给主机的解决方案。 就我而言,我想将本地端口从一个容器转发到另一个。假设我在具有 硬编码配置的 容器A 上运行服务, 以访问localhost 3306上的db 。但是我想在 容器B 上运行数据库服务器。 从A-localhost:3306到B-IP:3306的 端口转发的最佳方法是什么? 问题答案: 在您的容器中安装并在启动运行时安装 这将在您