PORTS
0.0.0.0:4466->4466/tcp
5432/tcp
Если вы проверите столбец портов команды docker ps
, вы поймете, что порт Postgres не доступен для использования на хост-машине.
Чтобы решить эту проблему, вам необходимо добавить в файл docker-compose.yml
следующее:
ports:
- "5432:5432"
Чтобы весь файл выглядел следующим образом:
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.30-alpha
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
# uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
# managementApiSecret: my-secret
prototype: true
databases:
default:
connector: postgres
host: postgres
user: prisma
password: prisma
port: 5432
postgres:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: prisma
POSTGRES_PASSWORD: prisma
volumes:
- postgres:/var/lib/postgresql/data
volumes:
postgres:
и затем вам нужно запустить docker-compose up -d
, чтобы применить новые изменения. При правильной настройке столбец PORTS
в docker ps
должен выглядеть следующим образом
PORTS
0.0.0.0:4466->4466/tcp
0.0.0.0:5432->5432/tcp
Отвечать на Ваш вопрос непосредственно, нет, там, кажется, не способ "обойти" SCNetworkReachabilityGetFlags () занимающий много времени для возврата при определенных обстоятельствах, которые Вы описали (например, проверив удаленную достижимость хоста через соединение WiFi с маршрутизатором без Интернета). Несколько опций:
ОПЦИЯ 1. Выполните вызов в отдельном потоке так, чтобы остальная часть Вашего приложения могла продолжать бежать. Измените ReachabilityAppDelegate.m следующим образом для примера:
// Modified version of existing "updateStatus" method
- (void)updateStatus
{
// Query the SystemConfiguration framework for the state of the device's network connections.
//self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
self.remoteHostStatus = -1;
self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
self.localWiFiConnectionStatus = [[Reachability sharedReachability] localWiFiConnectionStatus];
[tableView reloadData];
// Check remote host status in a separate thread so that the UI won't hang
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSTimer *timer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(updateRemoteHostStatus) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[pool release];
}
// New method
- (void) updateRemoteHostStatus
{
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
[tableView reloadData];
}
ОПЦИЯ 2. Используйте другой API/функцию, который использует значение тайм-аута при попытке соединиться с удаленным хостом. Тем путем Ваше приложение только зависло бы в течение X секунд, прежде чем оно сдастся.
Некоторые другие вещи отметить: