windows 10 20h1 에서 wsl2 docker를 사용중인데

8081포트에 bind 하는 프로그램이 10013 bind 에러를 내면서 실행이 되지 않았다.

포트를 사용중인 프로그램은 분명 없었는데


docker에서 elk를 테스트 해보려고 구동 했는데 역시 실행되지 않았다.

Creating network "docker-elk_elk" with driver "bridge"
Creating docker-elk_elasticsearch_1 ... error

ERROR: for docker-elk_elasticsearch_1  Cannot start service elasticsearch: Ports are not available: listen tcp 0.0.0.0:9200: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

ERROR: for elasticsearch  Cannot start service elasticsearch: Ports are not available: listen tcp 0.0.0.0:9200: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
ERROR: Encountered errors while bringing up the project.

intellij를 실행 했는데 bind 오류가 발생하면서 실행되지 않았다.

아무리 포트를 사용중인 프로그램을 찾아봐도 포트는 사용중이지 않았다.


intellij 오류창의 링크를 접속해보니 나와 같은 문제점이 있는 분이 있었고 그 아래 답변이 하나 있었다.


https://intellij-support.jetbrains.com/hc/en-us/articles/360007568559


나와 동일한 오류를 겪고 계신분의 덧글

On Windows "netsh winsock reset" in the Administrator console followed by the reboot should help. Also try disabling the antivirus/firewall and verify that the network configuration is correct.

관리자 창을 띄우고  명령을 실행하고 재부팅 하니 intellij와 개발 중인 프로그램은 실행되었다.

다만 도커는 아직도 안된다. 이건 조금 더 삽질을 해봐야 할 것 같다.

It's very uncommon when all 50 ports in this range are not available on the system.

Please provide the output from the following command in the Administrator console:

netsh interface ipv4 show excludedportrange protocol=tcp

Does it list all the ports in the range used by IntelliJ IDEA?

One of the possible reasons is a network misconfiguration caused by the Hyper-V. You can try to temporary disable Hyper-V Windows feature and see if it helps. Enabling it back should not cause the same problem again.

netsh 명령을 해보니 포트 목록에 9200이 포함되어 있다. hyper-v 관련 문제로 보인다.

그아래 다른 덧글을 좀 더 살펴보니 hyper-v가 예약한 포트 목록 때문으로 보인다고 한다.

관리자 콘솔에서 다음 명령 실행


netsh int ipv4 set dynamicport tcp start=49152 num=16383
netsh int ipv4 set dynamicport udp start=49152 num=16383

만세!! 오늘의 삽질 끝!


github의 관련 이슈
https://github.com/docker/for-win/issues/3171



vcpkg 2020.04를 사용중이였는데


2020.06 이 릴리즈되어서 업데이트를 했다.

그런데 프로젝트 빌드가 실패해서 이슈를 올리고 답변을 받은 내용을 정리 하자면


static triplet을 사용하는 방법이 .vcxproj 에 직접 수정을 해야 하는 방식에서

프로젝트 설정으로 변경되었다는 것이다.




내경우엔 x86-windows-static-md를 사용해야 해서 위와 같이 설정을 했다.

Triplet의 기본값은 $(VcpkgPlatformTarget)-$(VcpkgOSTarget) 이며

static 만 사용할 경우 Use Static libraries 를 예 로 설정 하면 된다.


.vcxproj 를 열여보면 다음과 같이 설정이 추가되어 있는것을 확인 할 수 있다.

  <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <VcpkgEnabled>true</VcpkgEnabled>
    <VcpkgUserTriplet>$(VcpkgPlatformTarget)-$(VcpkgOSTarget)-static-md</VcpkgUserTriplet>
  </PropertyGroup>


ps.

신규 업데이트가 있는것으로 착각 하고 git pull 로 업데이트 했는데

UI가 달라졌다.



unicode 환경 컴파일 작업중 ansi 파일을 읽고 쓰는 부분을 unicode에서 읽고 쓰기가 되도록 수정 하다보니

검색해보면 대부분 BOM을 사용하는것으로 검색이 된다.


하지만 내가 필요한 내용은 BOM이 없는 파일에서 utf-8 포맷의 텍스트 파일을 읽는것이라서

다음과 같은 방식으로 수정을 했다.



CString strBuffer; // 실제 작업용 버퍼
CStringA szFileBuffer; // 파일에서 읽어들일 버퍼

CString strFilePath;
strFilePath = _T("test.txt");

CFile   hFile;
DWORD n;
if(hFile.Open(strFilePath,CFile::modeRead)){
    n = (DWORD)hFile.GetLength();
    n = hFile.Read(szFileBuffer.GetBuffer(n), n);
    szFileBuffer.ReleaseBuffer(n);
    hFile.Close();
}
// utf-8 파일 내용을 unicode로 변환
strBuffer = CA2T(szFileBuffer, CP_UTF8);

// 이후 로직 처리

//파일 저장
if(hFile.Open(strFilePath,CFile::modeCreate | CFile::modeWrite )){
    // unicode 문자열을 utf-8로 변환
    szFileBuffer = CT2A(strBuffer, CP_UTF8);
    sf.Write(szFileBuffer, szFileBuffer.GetLength());        
    hFile.Close();
}


unicode에서도 CFile 은 BOM 이 없으면 ansi 형식으로 데이터를 읽으므로 CStringA를 사용하도록 하는것이 핵심!!


'지식창고 > 프로그램' 카테고리의 다른 글

CFile 에서 utf-8 파일 읽고 쓰기  (0) 2020.06.16
firefox Dns over HTTPS (DOH) 적용 하기  (0) 2018.05.17
nginx post 405 not allow 문제  (0) 2016.11.24
크롬 마우스 제스쳐 확장  (0) 2016.09.21
ConEmu 설정  (0) 2016.08.31
Laravel - 기본 라우팅  (0) 2015.05.19