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
このプロセスを開始させた私の最初の発言は次の通りです。
mkdir は必要ありません。WORKDIR が作成します。また、 や などの絶対参照を使用する方がよいでしょ
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スクリプトのエラーです。1つの可能性については、投稿で説明されています。 python subprocess.call() が期待通りに動作しない:
デフォルトでは、
subprocess.call
コマンドを実行するためにシェルを使用しないので、のようなシェル コマンドは使用できませんcd
。シェルを使用してコマンドを実行するには、
shell=True
パラメータとして使用します。その場合、コマンドをリストとしてではなく単一の文字列として渡すことをお勧めします。また、シェルによって実行されるため、~/
パスで使用することもできます。subprocess.call("(cd ~/catkin_ws/src && catkin_make)", shell=True)