Docker Toolbox 오류 "파일을 열 수 없습니다"

Docker Toolbox 오류 "파일을 열 수 없습니다"

저는 Docker Toolbox를 사용하여 Windows 10 Home에서 Docker 이미지를 실행하는 데 어려움을 겪었습니다. Kitematic에서 나타나는 오류는 다음과 같습니다.

python: can't open file 'src/__main__.py': [Errno 2]   
No such file or directory

실패한 이 Python 명령은 'notes' Docker 컨테이너의 진입점입니다.

Docker/up.sh 이후 프로세스는 오류 없이 완료됩니다.

Successfully built f59c275721cf
Successfully tagged docker_mysql:latest
Creating mysql ... done
Creating notes ... done

또한 이는 Mac의 다른 사용자가 이 오류를 복제할 수 없는 그룹 프로젝트입니다. Dockerfile을 아래와 같이 업데이트하고 실행한 후:

Successfully built 42a95cd419f2
Successfully tagged docker_mysql:latest
Creating mysql ... done
Creating notes ... done

User@DESKTOP-EBUI9GE MINGW64 /c/users/user/Desktop/6440/Procedure-Notes-Application (master)
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
68f60fdba6f5        docker_mysql        "docker-entrypoint.s…"   15 seconds ago      Up 9 seconds        0.0.0.0:23306->3306/tcp   mysql

User@DESKTOP-EBUI9GE MINGW64 /c/users/user/Desktop/6440/Procedure-Notes-Application (master)
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                     NAMES
e7fbd5b73189        docker_notes        "python /app/src/__m…"   23 seconds ago      Exited (2) 17 seconds ago                             notes
68f60fdba6f5        docker_mysql        "docker-entrypoint.s…"   23 seconds ago      Up 17 seconds               0.0.0.0:23306->3306/tcp   mysql

업데이트된 Dockerfile:

### Use an official Python runtime as a parent image 
FROM python:2.7-slim

### set working directory to the code location
WORKDIR /app

### copy the code base over (redone by the compose file)
COPY . .

### Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

### Make port available to the world outside this container
EXPOSE 5000

### start the application
CMD ["python", "/app/src/__main__.py"]

이제 또 다른 오류가 발생합니다.

 * Serving Flask app "__main__" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
Traceback (most recent call last):
  File "/app/src/__main__.py", line 57, in <module>
    app.run(debug=True, host='0.0.0.0')
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.7/site-packages/werkzeug/serving.py", line 988, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
  File "/usr/local/lib/python2.7/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
    sys.exit(reloader.restart_with_reloader())
  File "/usr/local/lib/python2.7/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
    exit_code = subprocess.call(args, env=new_environ, close_fds=False)
  File "/usr/local/lib/python2.7/subprocess.py", line 172, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/local/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/usr/local/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error

답변1

프로세스를 시작하게 한 나의 첫 번째 발언은 다음과 같습니다.

WORKDIR이 mkdir을 생성하므로 mkdir이 필요하지 않습니다. 또한 WORKDIR /app및 와 같은 절대 참조를 사용하는 것이 좋습니다 CMD ["python", "/app/src/__main__.py"].

이제 Python 스크립트가 시작되고 오류가 중지됩니다.

  File "/usr/local/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception

이는 일반적으로 Python 스크립트의 오류입니다. 한 가지 가능성이 게시물에 설명되어 있습니다. python subprocess.call()이 예상대로 작동하지 않습니다.:

기본적으로 subprocess.call셸을 사용하여 명령을 실행하지 않으므로 cd.

쉘을 사용하여 명령을 실행하려면 shell=True매개변수로 사용하십시오. 이 경우 명령을 목록이 아닌 단일 문자열로 전달하는 것이 좋습니다. 그리고 쉘에 의해 실행되므로 ~/경로에서도 사용할 수 있습니다.

subprocess.call("(cd ~/catkin_ws/src && catkin_make)", shell=True)

관련 정보