我似乎无法使用Docker容器连接到CloudSQL。
首先,这里是我的文件路径:https://imgur.com/a/Nmx41o6
Dockerfile.dev:
FROM node:14-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . ./
Dockerfile.sql
RUN mkdir /cloudsql
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY ./cloud_sql_proxy ./
COPY ./service_acct.json ./
version: '3.8'
services:
cloud-sql-proxy:
build:
context: .
dockerfile: DockerFile.sql
volumes:
- /cloudsql:/cloudsql
- /service_acct.json:/app/service_acct.json
command: ./cloud_sql_proxy -dir=/cloudsql -instances=test-game-199281:us-east1:testgame -credential_file=/app/service_acct.json
app:
build:
context: .
dockerfile: DockerFile.dev
env_file:
- ./.env
volumes:
# since we copied root into host in dockerfile, we can map the whole directory with app.
- "./src:/app/src"
ports:
- "5000:5001"
command: sh -c "npm run dev"
我的节点索引.js文件。我不认为有什么问题,也许我输入了错误的连接字符串格式?据我所知,密码和用户是正确的。
const express = require('express');
const { Pool, Client } = require('pg')
const app = express();
require('dotenv').config({path:'../.env'})
const pool = new Pool({
user: 'postgres',
host: '/cloudsql/test-game-199281:us-east1:testgame',
database: 'TestDB',
password: '********',
port: 5432
})
app.get('/', (req, res) => {
pool.connect(function(err, client, done) {
if (err) {
console.log("not able to get connection " + err);
res.status(400).send(err);
return
}
client.query("SELECT * FROM company", [1], (err, result) =>{
done();
if (err) {
console.log(err);
res.status(400).send(err);
}
res.status(200).send(result.rows);
});
});
});
我得到的错误:
Hello world listening on port 5001
app_1 | Error: connect ENOENT /cloudsql/test-game-199281:us-east1:testgame
/.s.PGSQL.5432
app_1 | at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
app_1 | errno: -2,
app_1 | code: 'ENOENT',
app_1 | syscall: 'connect',
app_1 | address: '/cloudsql/test-game-199281:us-east1:testgame
/.s.PGSQL.5432'
app_1 | }
解决:我切换到TCP。拧入unix插座。这太令人困惑了。
< code > e not 错误表示连接器实用程序找不到连接到数据库的主机。这里有一个很好的答案进一步解释了它。
在docker-compose文件上,云SQL代理正在通过TCP监听,但您的代码正在尝试通过Unix套接字连接。您的代码无法连接到主机,因为套接字不存在。
解决方案是配置您的代理以创建和监听Unix Socket。将命令更改为:
/cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME -dir=/cloudsql -credential_file=/tmp/keys/keyfile.json
无需公开任何端口即可通过 Unix 套接字进行连接。我还建议使用像上面链接中或pg-pool
指定的配置对象而不是数据库URL来构建池连接,以避免无法使用连接字符串URL连接到Unix套接字的
可能问题。
在不同Docker之间连接时,您可以尝试通过服务名称云sql代理:5432
而不是本地主机:5432
进行连接。
每个docker都是一个隔离的网络,因此您不能使用localhost,因为localhost将引用docker容器自己的本地网络。
您已经指示云SQL身份验证代理使用此标志监听< code > 0 . 0 . 0 . 0:5432 -instances = test-game-199281:us-east 1:test game = TCP:0 . 0 . 0 . 0:5432 。
但是,您已经指示您的应用程序连接到< code>/cloudsql/
你需要选择一个,并确保你的应用程序和代理之间保持一致。
如果使用 TCP,则必须将容器中的端口映射到计算机上的端口(或 Docker-compose 网络中应用可以访问它的某个位置)。您必须更新您的应用程序才能在127.0.0.1
(或其docker IP在网络中的任何)上进行连接。您可以在此处查看有关 Docker 撰写网络的更多信息。
如果您使用Unix域套接字,您需要宗卷共享包含套接字的文件夹,以便两个应用程序都可以访问它。因此,如果它在< code>/cloudsql中,您将需要在代理容器和应用程序容器之间共享< code>/cloudsql。你可以在这里查看更多的docker-compose卷。
云 SQL 的“管理数据库连接”页面提供了使用 TCP 和 Unix 域套接字进行连接的示例。
我正在尝试为我的kubernetes项目使用。 我遵循仙丹指南和凤凰指南。在Connect to your Cloud SQL实例中,该指南指出,运行“cloud_sql_proxy-dir=/tmp/cloudsql”和“psql-h/tmp/cloudsql/[CONNECTION-NAME]-u postgres”将打开代理。 所以我尝试用下面的这些命令创建一个新的目录。 然后我尝试连接云s
我有一个使用LocalDB并在Windows PC上运行良好的应用程序,但是我试图通过我的mac运行它......我正在努力将应用程序连接到位于docker上的mySQL服务器。我一直在遵循其他指南,例如(https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver1
每次我试图通过SSMS连接到azure服务器时,都会出现以下错误。已在服务器防火墙中列出IP客户端地址,但仍然不起作用。 微软 SQL 服务器,错误: 53 我正在使用Microsoft Imagine订阅下的azure学生许可证,这有问题吗? 附笔。: > 已尝试使用此 https://learn.microsoft.com/en-us/sql/database-engine/configure
问题内容: 我已经在服务器上安装了Kibana 5.4和Elastic search 5.4,我可以通过使用本地计算机上的curl来访问Kibana和Elastic search 我得到以下回应 var hashRoute =’/ app / kibana’; var defaultRoute =’/ app / kibana’; var hash = window.location.hash;
我已经在服务器上安装了Kibana 5.4和Elastic search 5.4,我可以使用 我得到以下回应 var hashRoute='/app/kibana'; var defaultRoute='/app/kibana'; var hash=window.location.hash; if(hash.length){window.location=hashRoute hash;}其他{wi
尝试使用Docker容器将Kibana连接到ES时出错: kibana-product-624|{"type":"log","@time戳":"2018-05-25T14:56:36Z","tags":["警告","elasticsearch","admin"],"pid": 1,"消息":"无法恢复连接:超文本传输协议://elasticsearch: 9200/"}kibana-product