Error de Docker Toolbox "no se puede abrir el archivo"

Error de Docker Toolbox "no se puede abrir el archivo"

He estado luchando para poner en funcionamiento una imagen de Docker en Windows 10 Home, usando Docker Toolbox. Aquí está el error que veo en Kitematic:

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

Este comando de Python que falla es el punto de entrada para el contenedor Docker de 'notas'.

Después de Docker/up.sh, el proceso finaliza sin errores.

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

Además, este es un proyecto grupal en el que otros usuarios de Mac no pueden duplicar este error. Después de actualizar Dockerfile a continuación y ejecutar:

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

Archivo Docker actualizado:

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

Ahora recibo otro error:

 * 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

Respuesta1

Mi primer comentario que permitió que comenzara el proceso fue:

No necesita mkdir, ya que WORKDIR lo creará. También es mejor utilizar referencias absolutas, como WORKDIR /appy CMD ["python", "/app/src/__main__.py"].

El script de Python ahora inicia y detiene el error:

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

Suele ser un error en el script de Python. Una posibilidad se describe en la publicación. Python subprocess.call() no funciona como se esperaba:

De forma predeterminada, subprocess.callno se utiliza un shell para ejecutar nuestros comandos, por lo que no se pueden ejecutar comandos como cd.

Para usar un shell para ejecutar sus comandos, utilícelo shell=Truecomo parámetro. En ese caso, se recomienda pasar los comandos como una sola cadena en lugar de una lista. Y como se ejecuta mediante un shell, ~/también puedes usarlo en tu ruta:

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

información relacionada