티스토리 뷰

macOS 운영체제 기반 PHP 개발 환경에서 
homestead 대신 docker 를 서버로 사용하려
laradock 설치 및 셋팅을 하던 중
xdebug 연동시 remote_host 주소 셋팅 단계가 되었는데

기존 macOS 용 docker 는 hypervisor 인 VirtualBox 기반이어서
호스트 IP 주소를 VirtualBox 의 네트워크 설정을 열어보면 쉽게 알 수 있었는데

현재 macOS 용 docker 는 linux 와 같이 hypervisor 가 필요 없게되어 자원낭비도 줄일 수 있는 등 여러모로 좋으나,
xdebug 연동하려다보니 remote_host 주소를 어디서 조회해봐야 하는지 오리무중이라 구글링!


docker 컨테이너에서 호스트 ip 접근 방법 #1 (택1)

https://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers

I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST
컨테이너에서 호스트의 서비스에 연결하고 싶다면 

The Mac has a changing IP address (or none if you have no network access).
현재 추천하는 방법은 맥의 lo0 루프백 네트워크 인터페이스에 사용하지 않는 IP를 붙이는것;
sudo ifconfig lo0 alias 10.200.10.1/24
명령을 수행한 후 이 주소나 0.0.0.0 (127.0.0.1 말고) 에서 서비스를 수신하도록 만들기.
그러면 컨테이너는 이 주소에 접속 가능.

macOS 에서 시스템 시작시 루프백 네트워크 인터페이스 별칭 설정
[참고] http://kiennt.com/blog/2012/06/27/add-new-startup-items-on-mac-osx.html

$ sudo mkdir -p /System/Library/StartupItems/DockerHelper

$ sudo touch /System/Library/StartupItems/DockerHelper/DockerHelper

$ sudo chmod +x /System/Library/StartupItems/DockerHelper/DockerHelper

$ sudo touch /System/Library/StartupItems/DockerHelper/StartupParameters.plist


# modify contents of StartuParameters.plist

$ sudo vim /System/Library/StartupItems/DockerHelper/StartupParameters.plist

{

    Description     = "Support Local Docker";

    Provides        = ("DockerHelper");

    OrderPreference = "None";

}


# modify contents of DockerHelper

$ sudo vim /System/Library/StartupItems/DockerHelper/DockerHelper


#!/usr/bin/env sh


. /etc/rc.common


StartService()

{

    ifconfig lo0 alias 10.200.10.1/24

}


StopService()

{

    ifconfig lo0 -alias 10.200.10.1/24

}


RestartService()

{

    ifconfig lo0 alias 10.200.10.1/24

}


RunService "$1"


호스트 파일 수정

# sudo vi /etc/hosts

10.200.10.1    laravel

(호스트에서 컨테이너 웹서비스에 http://laravel 과 같이 접근 가능)

hosts 파일 저장 후

10.200.10.1 을 클립보드에 복사


docker 컨테이너에서 호스트 ip 접근 방법 #2 (택1)

https://medium.com/@pablofmorales/xdebug-with-docker-and-phpstorm-786da0d0fad2
의 글을 참고로 하여 연동에 성공함.

공식 가이드 문서는 https://github.com/LaraDock/laradock/blob/master/_guides/phpstorm.md

remote_host 주소는 터미널 창에서 아래 명령을 시행하면 클립보드에 복사됨

 $ cat ~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/slirp/host | pbcopy

(laradock) xdebug 설정은 아래 이미지에서와 같이 하였으나
몇몇 설정은 입맛에 따라 변경 가능

laradock 의 docker-compose.yml 설정은

아래 yml 의 형광색 강조들과 같이 변경 하였으며,
중요한 부분은 extra_hosts: 하위 항목 주소값을 위 과정에서 클립보드에 복사했던 IP로 변경하는 것!
위 스샷의 xdebug.remote_host 의 주소에 매칭되는 host ip 값 설정임.

위 PHP_IDE_CONFIG=serverName=localhost 와 아래 스샷의 Name: localhost 값을 동일하게 할 것!

PHPStorm 설정은

CMD + , (쉼표) 클릭하여 환경설정 열고

환경 목록 필터를 위해 servers 타이핑 하여 목록 필터링 되면
Languages & Frameworks > PHP > Servers 찾고
아래 스샷과 같이 설정.

여기서 중요한 포인트는
경로들을 정확히 매칭시켜 주는것!

경로가 정확히 매칭되지 않은 경우
listening debugger connections 를 ON 하여 아이콘이 녹색 표시 상태에서
break 가 아예 걸리지 않거나
PHP script 맨 처음에 break 되는 상황이 발생함.

PHPStrom 에서 실행 버튼 좌측의 선택상자를 클릭 후 Edit Configurations... 클릭하고
아래 이미지와 같이 설정했음

docker-compose.yml 변경사항 적용위해 쉘 명령

// 1. 컨테이너 재생성, 가동 (복사된 설정 업데이트 반영)

$ docker-compose up -d nginx mysql

만약 위 명령으로 변경 적용이 되지 않으면 아래 터미널 명령

// 1. 기존 컨테이너 중지, 제거
// 2. php-fpm 재빌드
// 3. 컨테이너 생성, 가동

$ docker-compose down
$ docker-compose build php-fpm
$ docker-compose up -d nginx mysql




댓글