두 개의 도커 컨테이너가 실행중인 서버가 있습니다. 그중 하나는와 함께 제공되는 작은 응용 프로그램의 프런트 엔드입니다 http-server
. 이 애플리케이션은 Javascript 페치 API를 사용하여 다른 컨테이너에서 실행중인 Node.js 'json-server'모듈을 기반으로하는 매우 간단한 데이터베이스에서 데이터를 페치했습니다.
그렇게 json-server
사람이 할 수있는 브라우저를 가리키는 경우, 외부 사용자가 사용할 수있는 포트 3000, 즉하게 http://example.com:3000
, 내 데이터는 프론트 엔드가 제공하는 필터링 및 프리젠 테이션없이 사용할 수 있습니다. 이것은 내가 원하는 것이 아닙니다.
다른 도커 컨테이너가 평소처럼 데이터를 가져올 수 있도록 포트 3000을 외부 환경으로 차단하고 싶습니다. 나는 이것이 IP 기반으로 수행 될 수 있다고 생각하지만 그것을 수행하는 방법을 모르겠습니다.
이것은 현재 Iptables 구성이며, 대부분 Docker 자체에서 표준으로 작성됩니다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http-alt
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:3000
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
위의 구성에서 IP 172.17.0.2는 내 프론트 엔드 애플리케이션이고 172.17.0.3은 내 데이터베이스 컨테이너의 IP입니다.
프론트 엔드 컨테이너가 시작되고 있습니다
docker run -p 80:8080 --name=frontend -d mtr/frontend
두 번째는
docker run -p 3000:3000 --name=database -d mtr/database
또한이 액세스를 제한 할 수있는 도커 방법이있을 가능성을 고려했지만 많은 연구를 거친 후에는 아무것도 찾을 수 없었습니다.
이 작업을 수행하는 방법에 대한 제안 사항이 있습니까?