gpt4 book ai didi

python-3.x - docker 错误 : FileNotFoundError: [Errno 2]

转载 作者:行者123 更新时间:2023-12-02 18:06:06 31 4
gpt4 key购买 nike

docker 文件:

FROM python:3
WORKDIR /usr/src/app
RUN pip install flask
RUN pip install flask_restful
RUN pip install jsonpickle
COPY . .
CMD ["python", "restful.py"]

当我在包含 Dockerfile 和 restful.py 的目录中执行 docker build. 时,它会成功构建。

当我执行 docker run e36601b52e23 ls 时,我的输出是:
docker 文件
安静的.py

但是,当我执行 docker run e36601b52e23 时,我的输出是:

j@smith-TDVW1 MINGW64 ~/DockerProjects/python
$ docker run e36601b52e23
* Serving Flask app "restful" (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://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
Traceback (most recent call last):
File "restful.py", line 76, in <module>
app.run(debug=True)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 943, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python3.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/python3.7/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
sys.exit(reloader.restart_with_reloader())
File "/usr/local/lib/python3.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/python3.7/subprocess.py", line 323, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/local/lib/python3.7/subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "/usr/local/lib/python3.7/subprocess.py", line 1522, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/src/app/restful.py': '/usr/src/app/restful.py'

我正在使用 Windows 10/Git Bash/Docker 桌面。

编辑:我浏览了文件结构,它确实有/usr/src/app/restful.py。但是,当我执行 python restful.py 命令时,它会抛出该错误。该错误发生在启动命令中。有谁知道为什么会这样?

#!/usr/bin/python3

from flask import Flask, jsonify, request, abort
from flask_restful import Api, Resource
import jsonpickle

app = Flask(__name__)
api = Api(app)

# Creating an empty dictionary and initializing user id to 0.. will increment every time a person makes a POST request.
# This is bad practice but only using it for the example. Most likely you will be pulling this information from a
# database.
user_dict = {}
user_id = 0


# Define a class and pass it a Resource. These methods require an ID
class User(Resource):
@staticmethod
def get(path_user_id):
if path_user_id not in user_dict:
abort(400)

return jsonify(jsonpickle.encode(user_dict.get(path_user_id, "This user does not exist")))

@staticmethod
def put(path_user_id):
update_and_add_user_helper(path_user_id, request.get_json())

@staticmethod
def delete(path_user_id):
user_dict.pop(path_user_id, None)


# Get all users and add new users
class UserList(Resource):
@staticmethod
def get():
return jsonify(jsonpickle.encode(user_dict))

@staticmethod
def post():
global user_id
user_id = user_id + 1
update_and_add_user_helper(user_id, request.get_json())


# Since post and put are doing pretty much the same thing, I extracted the logic from both and put it in a separate
# method to follow DRY principles.
def update_and_add_user_helper(u_id, request_payload):
name = request_payload["name"]
age = request_payload["age"]
address = request_payload["address"]
city = request_payload["city"]
state = request_payload["state"]
zip_code = request_payload["zip"]
user_dict[u_id] = Person(name, age, address, city, state, zip_code)


# Represents a user's information
class Person:
def __init__(self, name, age, address, city, state, zip_code):
self.name = name
self.age = age
self.address = address
self.city = city
self.state = state
self.zip_code = zip_code


# Add a resource to the api. You need to give the class name and the URI.
api.add_resource(User, "/users/<int:path_user_id>")
api.add_resource(UserList, "/users")

if __name__ == "__main__":
app.run(debug=True)

第二次编辑:在 Windows 机器上运行相同的程序:

 * Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 511-979-152
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

当我运行容器时,它在“调试器处于事件状态!”之前中断了!

最佳答案

所以我找到了一个临时的“坏”解决方案。我刚刚从 app.run(debug=True) 中删除了 debug=True,它运行良好。如果有人能解释为什么会这样,那就太好了。

谢谢!

关于python-3.x - docker 错误 : FileNotFoundError: [Errno 2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55943016/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com