我一直在努力从本地主机和外部连接到postgresql容器。
这是一个非常好的演示,它在https://linuxhint.com/postgresql_docker/.下面是docker compose。yml,postgres:12.2和pgadmin通过它进行集装箱化和运行。事实上,在运行docker compose之后。yml文件(由docker compose up-d编写)它们可以工作。
然后,您可以在浏览器中访问http://localhost:8080/并具有直接访问权限(使用给定的凭据,即。,admin@linuxhint.com,secret),然后开始在docker上安装postgres:12.2。
然而,我的困难开始时,我试图找到连接到这个postgres: 12.2数据库直接从localhost或外部/一些应用程序/ip(如JavaSpring Boot)。
诚然,我不是docker的专家,只是个学生——所以,我请求帮助。希望有人能告诉我应该怎么做,才能从外部/app连接到(这个)容器化的postgres数据库。我用的是Win 10。
更新:
>
有人能说出为什么一个web应用程序(下面添加到docker.compose.yml,见下文)在启动后会持续关闭吗?
docker logs提供以下错误:
原因:org。springframework。豆。工厂BeanCreationException:创建名为“dataSource”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]中定义:初始化bean失败;嵌套的异常是org。springframework。豆。工厂BeanCreationException:创建名为“org”的bean时出错。springframework。靴子自动配置。jdbc。DataSourceInitializeInvoker':调用init方法失败;嵌套的异常是org。springframework。jdbc。数据源。初始化。UncategorizedScriptException:无法执行数据库脚本;嵌套的异常是org。springframework。jdbc。CannotGetJdbcConnectionException:获取JDBC连接失败;嵌套的异常是org。postgresql。util。PSQLException:与本地主机的连接:5433被拒绝。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接。
这里是Dockerfile的应用程序:
来自Maven: 3-JDK-11
音量/tmp
曝光8095
添加/target/spring-boot-demo-0.0.1-SNAPSHOT。jar应用程序。罐子
运行ls-ls
入口点["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
下面是应用程序中的连接详细信息。属性文件:
Spring数据源。url=jdbc:postgresql://db:5432/postgres
Spring数据源。用户名=管理员
spring.datasource.password=秘密
另外两项服务(db和pgadmin正常启动)
docker撰写。yml
version: "3.7"
services:
# ========== ADDED APP ===============
web:
#restart: on-failure
image: app-springboot-postgresql
build: ./
ports:
- "8095:8095"
environment:
WAIT_HOSTS: postgres:5432
depends_on:
- db
# ========== ADDED APP ===============
db:
image: postgres:12.2
restart: always
environment:
POSTGRES_DB: postgres
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
PGDATA: /var/lib/postgresql/data
volumes:
- db-data:/var/lib/postgresql/data
ports:
- "5432:5432"
pgadmin:
image: dpage/pgadmin4:4.18
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@linuxhint.com
PGADMIN_DEFAULT_PASSWORD: secret
PGADMIN_LISTEN_PORT: 80
ports:
- "8080:80"
volumes:
- pgadmin-data:/var/lib/pgadmin
links:
- "db:pgsql-server"
volumes:
db-data:
pgadmin-data:
检查它们是否在同一网络中:
docker network ls
# Output
NETWORK ID NAME DRIVER SCOPE
e094bb99be32 bridge bridge local
cde9fb0d3fef django bridge local
1aeb83753889 host host local
f152a346ca96 none null local
348c59c37462 web bridge local
然后检查网络:
docker network inspect django
# Output
[
{
"Name": "django",
"Id": "6f5fd395946d1bff8583a4ddbe4fb8ea1204875124679f878d24a57f3601b0e6",
"Created": "2020-10-11T13:16:42.750571609+02:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"079d303b3c2d17196e7cb49056ec7cfc7385c480c3cbf225dc51e53ebeb43f10": {
"Name": "pgadmin",
"EndpointID": "10e1f181f18e751ce0b3521f537e30948433e62b454fb9707b96333395f5ba36",
"MacAddress": "02:42:ac:14:00:04",
"IPv4Address": "172.20.0.4/16",
"IPv6Address": ""
},
"bff75ff8e23ab998cfc99bc87bec05ea9fb55adbcae1993da1cbc719eea90fd3": {
"Name": "postgres",
"EndpointID": "edd547148b50c6c3319f2b65ec151816e14f9ea9e7dd9acb9b5895d44fcd6cda",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
在上面的例子中,postgres和pgadmin在同一个网络中,所以他们可以看到对方。
如果它们不在同一个网络中,请明确定义。
# docker-compose.yml
services:
django:
container_name: dj
build:
context: ./server
restart: unless-stopped
volumes:
- staticfiles:/app/staticfiles
- mediafiles:/app/media
command: gunicorn nohchi_mott.wsgi:application --bind 0.0.0.0:8000
env_file: ./server/.env
expose:
- 8000
networks:
- web
- django
depends_on:
- db
db:
container_name: postgres
image: postgres:12.0-alpine
restart: unless-stopped
labels:
- "traefik.enable=false"
volumes:
- postgres_data:/var/lib/postgresql/data/
expose:
- 5432
networks:
- django
env_file: ./db/.env
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4:latest
restart: unless-stopped
volumes:
- pgadmin_data:/var/lib/pgadmin
env_file: ./db/pgadmin/.env
links:
- db:pgsql-server
networks:
- web
- django
depends_on:
- db
volumes:
staticfiles:
mediafiles:
postgres_data:
pgadmin_data:
networks:
web:
external: true
django:
external: false
docker compose。yml
将Postgres的5432端口发布到docker守护进程运行的机器。
因此,应用程序应该连接到作为Postgres主机的127.0.0.1
,以及作为Postgres端口的5432
,假设它们在机器上运行。
我有一个视频流android应用程序。Firebase项目包含视频链接和元数据。我已经实现了身份验证和firebase数据库规则,这样只有经过身份验证的用户才能访问这些视频。 仍然有人能够访问链接并下载视频上传到youtube上。 所以我的问题是如何完全阻止用户在应用程序之外访问我的json。我已将读取操作仅限于经过身份验证的用户。 任何人都可以使用命令行注册我的项目,然后访问数据吗?
外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。 使用 docker container ls 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应
问题内容: 在此URL中,我有一些Json数据。如何 使用该URL将数据获取到我的andorid应用程序。 我在Google中看到过引用。但是没有解决办法。 我是Andorid的新手。 请帮我。 问题答案: 做这个 : 步骤-1在您的gradle中导入排球库: 实现’com.android.volley:volley:1.1.0’ 然后在Java中编写以下代码:
问题内容: 我正在编写一个使用JPA进行持久化的J2SE应用程序(无企业容器)。这是我的: 这是一个静态文件,“编译”到应用程序中。但是,我需要提取凭据,以便可以在运行时从配置参数中加载它们,因为它们在应用程序的开发和实时版本方面是不同的。 我以默认方式加载持久性设置: 如何在此设置中外部化凭据?我可以在运行时生成persistence.xml文件,但这有点hacky。 问题答案: 您可以在创建时
从我的控制器中,我使用 但是我不知道如何从服务中访问它(我想我的服务类不应该扩展)。 我是否应该像这样将所需的参数映射到我的服务注册中: 或者类似的东西?如何从服务访问应用程序参数? 这个问题看起来是一样的,但我实际上回答了它(控制器的参数),我说的是从服务访问。
我正在迭代JSON数据,获取数据并将其赋值给一个全局变量,当我在循环内打印变量时,我得到了所有数据,然而,当我在循环外打印变量时,我只得到了JSON对象的最后一些数据。我的目标是获取数据并将其作为函数的参数传递。我如何获取循环之外的所有数据?