Docker Toolbox-Fehler „Datei kann nicht geöffnet werden“

Docker Toolbox-Fehler „Datei kann nicht geöffnet werden“

Ich habe Probleme, mithilfe der Docker Toolbox ein Docker-Image unter Windows 10 Home zum Laufen zu bringen. Hier ist der Fehler, den ich in Kitematic sehe:

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

Dieser fehlgeschlagene Python-Befehl ist der Einstiegspunkt für den Docker-Container „Notes“.

Nach Docker/up.sh wird der Vorgang ohne Fehler abgeschlossen.

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

Darüber hinaus handelt es sich um ein Gruppenprojekt, bei dem andere Benutzer auf Macs diesen Fehler nicht reproduzieren können. Nachdem Sie Dockerfile wie folgt aktualisiert und Folgendes ausgeführt haben:

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

Aktualisiertes 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"]

Ich erhalte jetzt einen weiteren Fehler:

 * 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

Antwort1

Meine erste Bemerkung, die den Prozess in Gang setzte, war:

Sie benötigen mkdir nicht, da es von WORKDIR erstellt wird. Es ist auch besser, absolute Referenzen wie WORKDIR /appund zu verwenden CMD ["python", "/app/src/__main__.py"].

Nun startet das Python-Skript und stoppt den Fehler:

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

Dies ist normalerweise ein Fehler im Python-Skript. Eine Möglichkeit wird im Beitrag beschrieben Python subprocess.call() funktioniert nicht wie erwartet:

Standardmäßig subprocess.callwird zum Ausführen unserer Befehle keine Shell verwendet, daher können Sie keine Shell-Befehle wie ausführen cd.

Um eine Shell zum Ausführen Ihrer Befehle zu verwenden, verwenden Sie shell=Trueals Parameter. In diesem Fall wird empfohlen, Ihre Befehle als einzelne Zeichenfolge und nicht als Liste zu übergeben. Und da es von einer Shell ausgeführt wird, können Sie ~/auch in Ihrem Pfad Folgendes verwenden:

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

verwandte Informationen