docker - 如何手动联网 docker 容器
问题描述
我有两个码头集装箱:
- 通过
docker-compose
运行 PostgreSQL 服务器启动的容器,该服务器可通过端口在主机上访问5432
- 通过它启动的容器
docker run
想要访问该 PostgresQL
运行以下:
docker run -p 80:80 a609c83f4cc3
成功启动容器,但无法访问 PostgreSQL 服务器。
12:16:06.192 [error] Postgrex.Protocol (#PID<0.2150.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (localhost:5432): connection refused - :econnrefused
有没有办法通过docker run
手动将运行的容器联网,以便它能够连接到 PostgreSQL 服务器?
docker-compose.yml
文件:
version: "3.8"
services:
db:
image: postgres
ports:
- 5432:5432
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: database
restart: always
解决方案
Compose 将自行创建一个名为default
. 与其他 Docker 对象一样,它以 Compose “项目名称”为前缀,通常是当前目录名称。如果您运行docker network ls
,您应该会看到一个名为something_default
.
获得该网络名称后,您可以将其提供给docker run
:
docker run --net something_default -p 80:80 a609c83f4cc3
您还必须配置您的应用程序以连接到数据库容器;它不会打开localhost
。独立容器应该仍然能够使用 Compose 提供的名称,例如,它可以使用 Compose 服务名称db
作为具有标准 PostgreSQL 端口 5432 的主机名(ports:
如果存在则被忽略)。
推荐阅读
- ios - 如何快速伪造进度条?
- java - 无法使用android中的自定义相机将捕获的图像保存在文件夹中
- c# - System.Security.Cryptography.CryptographicException:“参数不正确”/Aes 256 Gcm 解密
- excel - Excel VBA:从一个工作表调用一个函数,该函数在不同工作表上搜索数据
- php - Laravel 回显通知 + 套接字 io ,未收到通知
- c - Question about the equivalence of pointers and arrays in C
- java - 如何在 Android Studio 中计算工作日?
- android - 设备锁定时启动活动 android 8+
- haskell - Haskell - 使用滑动窗口在 2D 网格上进行模式匹配
- php - 无法从其他选项卡访问 Cookie