첫 번째 상황:
다음 docker-compose 파일이 있습니다
version: '3.4'
services:
api:
image: ${DOCKER_REGISTRY}project.api
ports:
- "5080:5080"
- "5081:5081"
build:
context: .
dockerfile: src/Api/Dockerfile.Debug
environment:
- ASPNETCORE_URLS=http://+:5080;http://+:5081;http://+:5443
- ASPNETCORE_HTTP_PORT=5080
- MANAGEMENT_HTTP_PORT=5081
- ASPNETCORE_ENVIRONMENT=Local
이렇게 하면 docker-compose up
컨테이너는 컨테이너에서 실행되는 API에 토큰을 제공해야 하는 특정 엔드포인트에 액세스할 수 없습니다. 그래서 시간 초과 오류가 발생합니다.
두 번째 경우: 그러나 다음 파일을 사용하면 제대로 작동합니다.
version: '3.4'
services:
api:
image: ${DOCKER_REGISTRY}project.api
build:
context: .
dockerfile: src/Api/Dockerfile.Debug
environment:
- ASPNETCORE_URLS=http://+:5080;http://+:5081;http://+:5443
- ASPNETCORE_HTTP_PORT=5080
- MANAGEMENT_HTTP_PORT=5081
- ASPNETCORE_ENVIRONMENT=Local
network_mode: host
내 호스트에서는 VPN이 실행 중일 때만 토큰 엔드포인트에 액세스할 수 있다는 점에 주목할 필요가 있습니다.
/etc/resolv.conf/
두 경우 모두에서( 사용하여) 컨테이너의 내용을 보려고 합니다 docker exec -it "container_id" bash
.
첫 번째 상황: (작업하지 않는 상황)
search XXX.biz YYY.biz
nameserver 127.0.0.11
options ndots:0
두 번째 상황: (작업 상황)
search XXX.biz YYY.biz
nameserver 10.10.***.***
nameserver 10.11.***.***
nameserver 8.8.8.8
누락된 항목 네임서버 10.10을 추가해 보았습니다.. 네임서버 10.11.. 네임서버 8.8.8.8
다음과 같이 daemon.json
:
{
"dns": [ "10.10.***.***", "10.11.***.***", "8.8.8.8" ],
"dns-search": [ "XXX.biz", "YYY.biz" ]
}
하지만 첫 번째 경우의 문제는 해결되지 않고 여전히 /etc/resolve.conf/
컨테이너 내부의 파일 항목이 표시되지 않습니다.
첫 번째 사건을 해결하는 방법에 대한 아이디어가 있습니까?
PS: 저는 Debian 10 머신을 가지고 있습니다.
다음을 모두 시도했지만 아무것도 작동하지 않습니다.
1번을 시도해보세요:또한 docker-compose 파일에 항목을 추가하려고 시도했지만 dns
작동하지 않았습니다.
2번 시도:이는 또한 docker-compose 및 networ_mode : brdige
에 항목을 추가 /etc/resolv.conf
하지만 애플리케이션은 여전히 토큰을 얻을 수 없습니다.
3번을 시도해보세요:./resolv.conf 파일에 예상 콘텐츠가 포함되어 있는 수동 설치입니다.
volumes:
- ./resolv.conf:/etc/resolv.conf
또한 에 항목이 추가되지만 /etc/resolv.conf
앱은 여전히 토큰을 가져올 수 없습니다.
오류는 다음과 같습니다
An error has occurred in Timed KeyCloak Authentificated Service
api_1 | System.Net.Http.HttpRequestException: Resource temporarily unavailable (oauth2.XXX.com:443)
이 문제는 토큰 공급자에 대한 액세스뿐만 아니라 인터넷에 대한 일반적인 액세스와 관련된 것으로 보입니다. 실제로 컨테이너 내부에서 다음 스크립트를 실행하면 "오프라인"이 반환됩니다.
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
Offline