我想运行docker compose。在运行react和django应用程序期间,dockercompose返回以下错误:
(base) dominik@Precision:~/PycharmProjects/humanet-docker$ ls
api docker-compose.prod.yml docker-compose.yml front nginx
(base) dominik@Precision:~/PycharmProjects/humanet-docker$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------------------
a7c8de30f648_humanet-docker_api_1 python manage.py runserver ... Exit 127
humanet-docker_db_1 docker-entrypoint.sh postgres Up 5432/tcp
humanet-docker_front_1 docker-entrypoint.sh yarn ... Up 0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
humanet-docker_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp,:::443->443/tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp
humanet-docker_pgadmin_1 /entrypoint.sh Up 443/tcp, 0.0.0.0:5050->80/tcp,:::5050->80/tcp
(base) dominik@Precision:~/PycharmProjects/humanet-docker$ docker-compose up
humanet-docker_pgadmin_1 is up-to-date
humanet-docker_front_1 is up-to-date
Starting a7c8de30f648_humanet-docker_api_1 ...
humanet-docker_nginx_1 is up-to-date
Starting a7c8de30f648_humanet-docker_api_1 ... error
ERROR: for a7c8de30f648_humanet-docker_api_1 Cannot start service api: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "python manage.py runserver 0.0.0.0:8000": executable file not found in $PATH: unknown
ERROR: for api Cannot start service api: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "python manage.py runserver 0.0.0.0:8000": executable file not found in $PATH: unknown
ERROR: Encountered errors while bringing up the project.
(base) dominik@Precision:~/PycharmProjects/humanet-docker$
下面是我的docker 的docker-compose.yml文件
version: "3.3"
services:
front:
build: ./front
working_dir: /home/dominik/node
env_file: ./front/.env.dist
volumes:
- ./front:/home/dominik/node
- /private/etc/ssl:/etc/ssl
ports:
- 3000:3000
restart: always
tty: true
api:
build: ./api
working_dir: /home/dominik/python
command: pip install -r requirements.txt && python manage.py runserver 0.0.0.0:8000
volumes:
- ./api:/home/dominik/python
- /private/etc/ssl:/etc/ssl
ports:
- 4000:4000
- 8445:8445
restart: always
tty: true
nginx:
build: ./nginx
volumes:
- /private/etc/ssl:/etc/ssl
ports:
- 80:80
- 443:443
working_dir: /home/dominik/node
restart: always
tty: true
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: xxx
POSTGRES_USER: xxx
POSTGRES_DB: xxx
POSTGRES_HOST_AUTH_METHOD: trust
PGDATA: /data/db
volumes:
- /home/dominik/data/humanet-db:/data/db
pgadmin:
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: xxx
PGADMIN_DEFAULT_PASSWORD: xxx
ports:
- 5050:80
volumes:
- /home/dominik/data/humanet-pgadmin:/var/lib/pgadmin
- /home/dominik/data/humanet-pgadmin/servers.json:/pgadmin4/servers.json
这是docker第一次返回我的消息:无法启动服务api:OCI运行时创建失败:container_linux.go:380:启动容器进程导致:exec:"python manage.py runserver 0.0.0.0:8000":在$PATH中找不到可执行文件:未知
错误:对于api无法启动服务api:OCI运行时创建失败:container_linux.go:380:启动容器进程导致:exec:"python manage.py runserver 0.0.0.0:8000":在$PATH中找不到可执行文件:未知错误:启动项目时遇到错误。
如何处理?
基于错误消息
exec: "python manage.py runserver 0.0.0.0:8000"
看起来您已经传递了命令,它的args作为docker运行的单个字段。例如,如果您的Dockerfile包含:
ENTRYPOINT [ "python manage.py runserver 0.0.0.0:8000" ]
这将寻找完整的字符串作为要运行的可执行文件,而不是第一个argmanage.py的python,而是一个名为的可执行程序
/bin/"python manage.py runserver 0.0.0.0:8000"
相反,你需要将这些论点中的每一个分开:
ENTRYPOINT [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]
然后,您将进入下一个问题,即为什么要在撰写文件中设置命令,以及是否需要。
在运行docker-compose命令之前,请尝试使用命令chmod +x
在您的entrypoint.sh和docker-entrypoint.h文件中授予可执行权限。