2017-12-28 6 views
2

가 여기 내 작성 파일입니다 :은 (아마도 플라스크 관련?)

FROM node:8.9.3 

WORKDIR /app 

COPY ./package.json /app 
COPY ./server /app/server 
COPY ./client /app/client 

EXPOSE 3000 

ENV PORT 3000 

RUN ["npm", "install"] 
ENTRYPOINT ["npm", "start"] 

그리고 api 프로젝트 : 여기

version: '2' 
services: 
    web: 
    build: ./web 
    ports: 
     - "3000:3000" 
    links: 
     - api 
    api: 
    build: ./api 
    links: 
     - db 
    db: 
    image: postgres 

내 Dockerfile가 web 서비스입니다 :

FROM python:3.6 

WORKDIR /api 

COPY ./requirements.txt /api/requirements.txt 
COPY ./src /api/src 

EXPOSE 80 

ENV PORT 80 

RUN ["pip", "install", "-r", "requirements.txt"] 
RUN ["python", "src/main.py"] 

docker-compose up을 실행하면 api 서비스가 시작됩니다. 그러나 api 서비스를 모두 주석으로 처리하고 docker-compose up을 다시 실행하면 webdb 서비스가 모두 시작됩니다. api 프로젝트를 설정하는 데 문제가 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 그냥 완전성에 대한

, 여기에 web 프로젝트 (Express를 사용)

http.createServer(app).listen(app.get("port"), function() { 
    console.log("Express server listening on port " + app.get("port")); 
}); 

의 시작 파일과 api PROJ (사용 플라스크)입니다 :

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == '__main__': 
    app.run(debug=True, host='0.0.0.0', port=80) 

UPDATE

나는 내 플라스크 서버의 메인 라인을 주석 처리했으며 3 가지 서비스를 모두 시작할 수 있습니다. 단점은 ... 이제 API 서버가 없다는 것입니다. 다른 서비스를 사용할 수 없도록 만드는 Flask에 대해 무엇입니까?

업데이트 2

일부는 로그를보고 요청했습니다. 플라스크를 구축 해달라고 다른 컨테이너를 포함하는 방법을

Building api 
Step 1/8 : FROM python:3.6 
---> c1e459c00dc3 
Step 2/8 : WORKDIR /api 
---> Using cache 
---> 8c9da963377c 
Step 3/8 : COPY ./requirements.txt /api/requirements.txt 
---> Using cache 
---> 654c815801f6 
Step 4/8 : COPY ./src /api/src 
---> 5627279f7323 
Removing intermediate container 453bf031c2f7 
Step 5/8 : EXPOSE 80 
---> Running in efb18f950f7d 
---> 1389c63a0bcb 
Removing intermediate container efb18f950f7d 
Step 6/8 : ENV PORT 80 
---> Running in 2ad88bed6343 
---> fa85201cc165 
Removing intermediate container 2ad88bed6343 
Step 7/8 : RUN pip install -r requirements.txt 
---> Running in e19107f5a449 
Collecting flask==0.12.2 (from -r requirements.txt (line 1)) 
    Downloading Flask-0.12.2-py2.py3-none-any.whl (83kB) 
Collecting itsdangerous>=0.21 (from flask==0.12.2->-r requirements.txt (line 1)) 
    Downloading itsdangerous-0.24.tar.gz (46kB) 
Collecting Werkzeug>=0.7 (from flask==0.12.2->-r requirements.txt (line 1)) 
    Downloading Werkzeug-0.13-py2.py3-none-any.whl (311kB) 
Collecting click>=2.0 (from flask==0.12.2->-r requirements.txt (line 1)) 
    Downloading click-6.7-py2.py3-none-any.whl (71kB) 
Collecting Jinja2>=2.4 (from flask==0.12.2->-r requirements.txt (line 1)) 
    Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB) 
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask==0.12.2->-r requirements.txt (line 1)) 
    Downloading MarkupSafe-1.0.tar.gz 
Building wheels for collected packages: itsdangerous, MarkupSafe 
    Running setup.py bdist_wheel for itsdangerous: started 
    Running setup.py bdist_wheel for itsdangerous: finished with status 'done' 
    Stored in directory: /root/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a 
    Running setup.py bdist_wheel for MarkupSafe: started 
    Running setup.py bdist_wheel for MarkupSafe: finished with status 'done' 
    Stored in directory: /root/.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57 
Successfully built itsdangerous MarkupSafe 
Installing collected packages: itsdangerous, Werkzeug, click, MarkupSafe, Jinja2, flask 
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.13 click-6.7 flask-0.12.2 itsdangerous-0.24 
---> a7be838d3a6e 
Removing intermediate container e19107f5a449 
Step 8/8 : RUN python src/main.py 
---> Running in e86c8adf46f0 
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit) 

주의 사항 :

Building web 
Step 1/10 : FROM node:8.9.3 
---> 2eeae8debf3d 
Step 2/10 : WORKDIR /app 
---> Using cache 
---> 02199a27dafb 
Step 3/10 : COPY ./package.json /app 
---> Using cache 
---> fafac64ad492 
Step 4/10 : COPY ./app.js /app 
---> Using cache 
---> 0b1e3067451b 
Step 5/10 : COPY ./controllers /app/server 

---> Using cache 
---> ff00fa864078 
Step 6/10 : COPY ./client /app/client 
---> Using cache 
---> 587214c84267 
Step 7/10 : EXPOSE 3000 
---> Using cache 
---> ddd5b795fcf5 
Step 8/10 : ENV PORT 3000 
---> Using cache 
---> ca4c37f63468 
Step 9/10 : RUN npm install 
---> Using cache 
---> 74b289885447 
Step 10/10 : ENTRYPOINT npm start 
---> Using cache 
---> 9c5ec6770c47 
Successfully built 9c5ec6770c47 
Successfully tagged testcomposemachine_web:latest 
Recreating testcomposemachine_web_1 
Starting testcomposemachine_db_1 
Attaching to testcomposemachine_db_1, testcomposemachine_web_1 
db_1 | 2017-12-28 23:11:55.861 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 
db_1 | 2017-12-28 23:11:55.861 UTC [1] LOG: listening on IPv6 address "::", port 5432 
db_1 | 2017-12-28 23:11:55.874 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 
db_1 | 2017-12-28 23:11:55.907 UTC [24] LOG: database system was shut down at 2017-12-28 22:59:27 UTC 
db_1 | 2017-12-28 23:11:55.919 UTC [1] LOG: database system is ready to accept connections 
web_1 | 
web_1 | > [email protected] start /app 
web_1 | > node app.js 
web_1 | 
web_1 | Express Web server listening on port 3000 

을 내가 플라스크를 포함하는 경우 로그 현재 위치 : 내가 플라스크없이 시작하는 경우

다음 로그는?

+0

코드를 읽었습니까? 최소한의 완전한 예입니다. – dopatraman

+0

만약 내가 이것을 로컬로 실행하려고한다면, 필자가 직면 한 첫 번째 문제는 누락 된 package.json입니다. 내 자신의 환경에서 문제를 재현하는 데 필요한 모든 요소는 여기에 존재하지 않으며 그렇게하면 문제의 원인을 찾아내어 최소한의 문제로 만듭니다. – BMitch

+0

각 프로젝트는 독립적으로 파일을 시작합니다. 이는 각 프로젝트가 자체적으로 실행 가능하다는 것을 의미합니다. iv는 프로젝트의 문제가되는 부분을 보여줌으로써 가능한 한 최소화했습니다. 나는 내가 무엇을 더 할 수 있는지 모른다. – dopatraman

답변

1

앱 도커 파일에서 완료 할 수없는 실행 명령이 있습니다. 이로 인해 도커 파일의 빌드가 끝나지 않습니다. 그것이 8/8 단계를 말하고 웹 컨테이너처럼 "성공적으로 구축되었습니다"라고 말하는 이유입니다. 내가 마지막으로 실행 한 명령을 진입 점이나 CMD로 옮기면 웹 도커 파일에있는 것과 같은 방식으로 도커 빌드 명령이 실제로 끝날 수 있습니다.

IE CMD ["python", "src/main.py"] 또는 가장 가능성이 내장되지 않도록 고정 표시기 이미지를 방해하는 것입니다 ENTRYPOINT ["python", "src/main.py"]

. 포 그라운드에서 닫히지 않는 웹 서버를 시작하는 APP의 마지막 행 때문입니다. 가장 좋은 방법은 명령을 진입 점에 배치하여 빌드 프로세스 중에 실제로 실행되지 않지만 이미지가 시작될 때 실행되도록하는 것입니다.

Step 8/8 : RUN python src/main.py ---> Running in e86c8adf46f0 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

VS 웹 구축 중이 하나

은 내가 이야기하고있는 라인입니다. 명령이 완료되지 않을 경우

Step 10/10 : ENTRYPOINT npm start ---> Using cache ---> 9c5ec6770c47 Successfully built 9c5ec6770c47 Successfully tagged testcomposemachine_web:latest Recreating testcomposemachine_web_1 Starting testcomposemachine_db_1 Attaching to testcomposemachine_db_1, testcomposemachine_web_1

빌드 완료하지 않습니다. 그래서 예, Flask API는 docker-compose 명령이 다른 모든 파일을 빌드하는 것을 방해합니다.