감사합니다만, 플러그인 내에 플랫폼에 종속적인 명령줄 유틸리티를 사용하여 정보를 가져오는 방식은 제 환경에서는 (필요한 대로) 작동하지 않습니다. (아래 명령으로 docker ID를 가져오는 것이 저희 Ubuntu 18.04 환경에서 작동하지 않음):
# cat /proc/self/cgroup|grep "systemd:/docker"| awk -F/ '{print $3}'|cut -c1-12
#. (결과 없음)
아래 명령도 결과를 주지 않습니다:
# cat /proc/self/cgroup|grep "systemd:/docker"
# (결과 없음)
참고 (docker ps 출력):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63c52bc571b5 local_discourse/socket-only "/sbin/boot" 28 minutes ago Up 28 minutes socket-only
631fbabedda9 local_discourse/socket-only2 "/sbin/boot" 26 hours ago Up 26 hours socket-only2
123743e12208 mysql/mysql-server "/entrypoint.sh mysq…" 2 days ago Up 20 hours (healthy) 33060/tcp, 0.0.0.0:6603->3306/tcp mysql-man
7a145366268c registry.unix.com/unix:condor "/run.sh" 6 days ago Up 20 hours 3306/tcp, 0.0.0.0:8999->80/tcp unix
3cc0c90c3e3a registry:2 "/entrypoint.sh /etc…" 7 days ago Up 7 days 0.0.0.0:5000->5000/tcp hubby
ca7b55fc5a0c local_discourse/data "/sbin/boot" 2 weeks ago Up 8 days data
즉, 실행 중인 컨테이너 이름을 지정하는 문자열 정보는 yml 파일의 환경 변수에서 파생되어야 합니다. 이를 통해 플랫폼 중립성을 확보하고 여러 컨테이너가 동시에 실행되는 환경에서도 정상 작동할 수 있도록 해야 합니다.
예를 들어, 우리는 동시에 여러 Discourse 앱 컨테이너와 기타 컨테이너를 실행합니다. 따라서 docker-cli 명령을 사용해서는 우리가 필요한 정확한 정보(리버스 프록시 설정에 의해 결정되며 docker에 의해 결정되지 않는, 웹에서 “현재” 실행 중인 컨테이너의 이름)를 제공할 수 없습니다.
우리는 리버스 프록시 설정에서 unix 소켓 이름(또는 노출된 컨테이너 포트)을 변경하여 표시할 컨테이너를 선택하므로, 다운타임 없이 1초도 안 되는 시간에 컨테이너를 전환할 수 있습니다. 이는 컨테이너 이름이 100% 신뢰할 수 있고 정확하려면 yml 파일의 환경 변수에서 가져와야 함을 의미합니다.
따라서 문자열(컨테이너 이름, 컨테이너 ID 등) 정보는 yml 파일의 환경 변수에서만 가져오도록 하는 것이 제 요구사항입니다.
컨테이너 ID를 선호하는 경우, 다음과 같이 환경 변수에 추가할 수 있습니다(예시):
DISCOURSE_APP_CONTAINER_NAME = 'socket-only (63c52bc571b5)'
또는:
DISCOURSE_APP_CONTAINER_NAME = '63c52bc571b5'
DISCOURSE_DATA_CONTAINER_NAME = 'ca7b55fc5a0c'
그리고 제 원본 게시글(우리가 원하는 사용 방식)에 따르면:
DISCOURSE_APP_CONTAINER_NAME = 'socket-only'
DISCOURSE_DATA_CONTAINER_NAME = 'data'
어떤 문자열(토큰) 식별자(이름, 컨테이너 ID, 또는 둘 다)를 사용할지는 시스템 관리자(또는 비즈니스)의 요구사항에 따라 결정됩니다.
이것이 제가 정보가 docker ps나 기타 OS(플랫폼)에 종속적인 CLI 명령이 아닌, 메인 앱 yml 파일의 환경 변수로 하드코딩되어야 한다고 명확히 지적한 이유입니다.
제 요구사항이 더 명확해졌기를 바랍니다.
플랫폼과 설정에 중립적이고 CLI 명령이나 시스템 명령에 의존하지 않는 방식을 원합니다. 우리는 서버에서 Discourse뿐만 아니라 많은 다른 앱에 Docker를 사용하고 있습니다(위 docker ps 출력 예시에서 볼 수 있듯이 Discourse, Docker화 된 LAMP 앱, Docker 프라이빗 레지스트리 등).