所以我在Docker容器中运行了一个Nginx,我在localhost上运行了一个mysql,我想从我的Nginx中连接到MySql.MySql在localhost上运行,而不是将端口暴露给外部世界,所以它绑定在localhost上,而不是绑定在机器的ip地址上.
有没有办法从这个docker容器中连接到这个MySql或localhost上的任何其他程序?
正如标题所说.我需要能够检索docker托管的IP地址和从主机到容器的端口映射,并在容器内部执行此操作.
我基于两个不同的图像创建了两个docker容器.db和另一个用于webserver.两个容器都在我的mac osx上运行.
我可以从主机访问数据库容器,同样可以从主机访问网络服务器.
但是,我如何从网络服务器访问数据库连接?
我启动db容器的方式是
docker run --name oracle-db -p 1521:1521 -p 5501:5500 oracle/database:12.1.0.2-ee
Run Code Online (Sandbox Code Playgroud)
我开始使用容器作为
docker run --name oracle-wls -p 7001:7001 wls-image:latest
Run Code Online (Sandbox Code Playgroud)
我可以通过连接访问主机上的数据库
sqlplus scott/welcome1@//localhost:1521/ORCLCDB
Run Code Online (Sandbox Code Playgroud)
我可以在主机上访问wls
http://localhost:7001/console
Run Code Online (Sandbox Code Playgroud) 我的主机上有一个守护进程在某个端口上运行(即8008),我的代码通常通过联系localhost:8008与守护进程交互.
我现在已经将我的代码容器化了,但还没有守护进程.如何将我的容器上的localhost:8008转发到运行容器的主机上的localhost:8008(以及守护进程).
以下是netstat -tlnp
我的主人.我希望容器在主机上将localhost:2009转发到localhost:2009
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2009 0.0.0.0:* LISTEN 22547/ssh
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:2009 :::* LISTEN 22547/ssh
Run Code Online (Sandbox Code Playgroud) 我有一个运行 Nuxt.js (Vue.js) 应用程序的容器,定义如下docker_composes.yml
:
version: '3'
services:
vue:
build: .
image: registry.gitlab.com/something/app:${TAG}
environment:
- apiPath="http://localhost:5000/"
- filePath="http://localhost:3000/"
ports:
- "${EXPOSED_PORT:-80}:${NUXT_PORT:-3000}"
restart: always
Run Code Online (Sandbox Code Playgroud)
该应用程序是一个前端。我在本地主机上运行后端,在端口上5000
。当容器化应用程序尝试连接到http://localhost:5000/
它时失败。
我有哪些选择?我不想将后端放入docker_composes.yml
并通过链接连接它们。如果这是唯一的选择,我会的。
在Mac和Windows上,可以在容器内使用docker.for.mac.host.internal
(替换docker.for.mac.localhost
)和docker.for.win.host.internal
(替换docker.for.win.localhost
).
是否有一个Linux将开箱即用而不传递env变量.
我正在尝试使用dockerized版本的nginx作为我的节点(ExpressJS)应用程序的代理服务器.没有任何配置到nginx和发布容器的端口80,我能够看到默认的nginx登陆页面.所以我知道这很有用.
现在我可以挂载包含配置的启用站点的目录proxy_pass localhost:3000
.我的节点应用程序在本地运行(不在任何Docker容器中),我可以通过端口3000(即localhost:3000
)访问它.但是,我假设在nginx容器运行,映射到端口80,并代理我的localhost:3000,我将能够看到我非常简单的(hello world)应用程序.相反,我收到502.
我需要把东西传递给码头工人吗?这可能是nginx配置错误吗?这是我的nginx配置:
server {
listen 0.0.0.0:80;
server_name localhost;
location / {
proxy_pass http://localhost:3000;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用这个问题,但似乎没有帮助.这是除非我做错了.
Prometheus 在docker容器(版本 18.09.2,构建 6247962,docker-compose.xml
如下)中运行,并且刮取目标是localhost:8000
由 Python 3 脚本创建的。
为失败的抓取目标 ( localhost:9090/targets
)获得的错误是
获取http://127.0.0.1:8000/metrics:拨号 tcp 127.0.0.1:8000:getsockopt:连接被拒绝
问题:为什么 docker 容器中的 Prometheus 无法抓取在主机(Mac OS X)上运行的目标?我们如何让在 docker 容器中运行的 Prometheus 能够抓取在主机上运行的目标?
失败的尝试:尝试替换docker-compose.yml
networks:
- back-tier
- front-tier
Run Code Online (Sandbox Code Playgroud)
和
network_mode: "host"
Run Code Online (Sandbox Code Playgroud)
但随后我们无法访问 Prometheus 管理页面localhost:9090
。
无法从类似问题中找到解决方案
docker-compose.yml
version: '3.3'
networks:
front-tier:
back-tier:
services:
prometheus:
image: prom/prometheus:v2.1.0
volumes:
- ./prometheus/prometheus:/etc/prometheus/
- ./prometheus/prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- …
Run Code Online (Sandbox Code Playgroud) 我只是好奇,host.docker.internal 主机上正在运行什么?
该服务将包从 docker 容器路由到主机网络上的服务。
但它到底是什么?
我发现这不是网关。