2016-06-01 6 views
5

여기에 내가 단일 노드에있을 때이 고정 표시기의 작성 파일이 작동 내 고정 표시기의 작성 파일방법으로 떼에서 컨테이너를 고정 표시기 로컬 파일을 공유하는

version: '2' 
services: 
demoui: 
    image: demoimage 
    ports: 
    - "80:8000" 
    volumes: 
    - ./democonfig/config.js:/usr/local/tomcat/webapps/demo-ui/config.js 
    - ./logs/demo-ui:/usr/local/tomcat/logs 
    restart: unless-stopped 

입니다 고정 표시기-구성한다. 도커 떼로 옮긴 후. 그것은 작동하지 않습니다. 그것은

ERROR: for demoui Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory" 
Traceback (most recent call last): 
    File "<string>", line 3, in <module> 
    File "compose/cli/main.py", line 63, in main 
AttributeError: 'ProjectError' object has no attribute 'msg' 
docker-compose returned -1 

그래서 질문이 클러스터를 떼하는 파일을 공유하는 방법

  1. 입니다 다음과 같은 오류가 발생합니다?

  2. 모든 파일을 이미지로 복사하여 실행해야합니까?

  3. 도커 볼륨에 대한 문서를 swarm과 공유하십시오.

답변

1

오류는 설치하려는 swarm 노드에 볼륨의 소스 파일/디렉토리가 존재하지 않기 때문에 발생합니다. Docker (및 docker-compose)는 해당 파일을 swarm의 다른 호스트로 복사 할 수 없습니다.

구성 파일을 공유하려는 모든 swarm 노드에 소스 파일/디렉토리가 있어야합니다. 또한 작성 파일에서 컨텍스트 종속 경로를 사용하고 있는데, 이는 모든 노드에서 일관성이 없을 것입니다. 대신 절대 경로 (예 : ./config 또는 ~/config이 아닌 /opt/config) 여야합니다.

빠른 수정으로 동일한 위치 (예 :/opt 또는 다른 디렉토리)의 각 노드에 구성 파일을 복사하고이 일관된 위치를 가리 키도록 작성 파일을 수정해야합니다.

volumes: 
    - /opt/config/config.js:/usr/local/tomcat/webapps/demo-ui/config.js 
    - /opt/logs/demo-ui:/usr/local/tomcat/logs 

장기, 당신은 자동으로 노드에 동기화를 유지하는 lsyncd 같은 도구를 사용하여 수동으로 파일을 동기화하여 NFS 볼륨을 배치하고 각 노드에서 해당 마운트, 또는 같은 것을 사용 할 수 있습니다 glusterfs.

로깅 디렉터리를 염두에두면 로그 파일이 서로 충돌하지 않도록 할 수 있으므로 로컬로 유지하거나 공유를 사용하는 경우 로그 파일 이름이 각 노드마다 고유하도록 할 수 있습니다. 저장.