나는 이것이 이상하게 들리는 것을 알고있다. 그러나 여기에있는 것이있다. 데이터베이스를 호스팅하는 도커 컨테이너가 있습니다. 그리고 스크립트 하나 하나를 하나씩 실행하려고하는 스크립트가 있습니다. 이제 스크립트는 데이터베이스 포트를 알지 못합니다 (컨테이너가 다른 포트에 바인드 할 때마다).왜 bash 스크립트가 터미널 창 크기에 따라 작동합니까?
#!bin/bash
echo "Calculating the port..."
port=$(docker-compose ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//")
echo "Port is $port"
기본적으로는 고정 표시기-작성 PS의 출력에 대응하기로했다,이 같은 출력 :
Name Command State Ports
wildfly_database-docker_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32768->3306/tcp
을하지만, 여기에 일이 그래서 여기에 스크립트의 시작입니다. 터미널 창 크기가 작 으면이 스크립트가 작동하지 않고 포트 변수는 비어 있습니다. 터미널 창을 전체 화면으로 확장하면 제대로 작동하고 필요한 것을 수행합니다. 첫 번째 경우의 출력이 여러 줄로 나뉘며 올바르게 파싱되지 않기 때문입니다.
그래서 bash 스크립트를 창 크기와 독립적으로 작동시키는 방법은 무엇입니까?
UPD. 나는 그 해답 덕분에 해결책을 발견했다. 이것은 docker-compose의 문제인 것처럼 보입니다. 하지만이 라인으로 바꾼 후에
port=$(docker ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//")
모든 것이 잘 동작합니다. Docker 자체는 터미널 크기의 영향을받지 않습니다.
https://github.com/docker/compose/issues/1513 – muru
@muru, 고마워요. 내 버전의 고정 장치가 해당 버그의 영향을 받았지만 docker 자체는 스크립트를 변경 했으므로 이제는 큰 효과가 있습니다 –
@muru, 팁 주셔서 감사합니다. 답변으로 추가했습니다 –