Python 如何在远程服务器上以与Docker compose up相同的方式运行Docker容器?
TL;DR:获取错误Python 如何在远程服务器上以与Docker compose up相同的方式运行Docker容器?,python,docker,nginx,docker-compose,Python,Docker,Nginx,Docker Compose,TL;DR:获取错误/docker-entrypoint.sh:第10行:exec:nginx:cannot execute:当docker compose up工作正常时,目录是否正在运行docker run username/srdc\u prod:2020.07.26 我有一个docker容器,我已经推到DockerHub。我可以在本地运行docker compose。我在我的远程服务器上关闭了它,现在我正在尝试使用docker-run-username/srdc\u-prod:2020.
/docker-entrypoint.sh:第10行:exec:nginx:cannot execute:当docker compose up
工作正常时,目录是否正在运行docker run username/srdc\u prod:2020.07.26
我有一个docker容器,我已经推到DockerHub。我可以在本地运行docker compose。我在我的远程服务器上关闭了它,现在我正在尝试使用docker-run-username/srdc\u-prod:2020.07.26
执行此操作时,会出现错误/docker-entrypoint.sh:第10行:exec:nginx:cannot execute:Is a directory
。执行docker compose up
在本地运行良好。我想将此映像推送到Docker Hub,然后将其下拉并在远程服务器上运行。但是,我不能使用docker compose up
,因为docker compose.yaml
文件在远程不存在。我意识到我可以尝试远程克隆我的GitHub repo,然后运行docker compose up
,但这无法实现将容器推送到DockerHub并最终设置CI/CD的目的
有没有办法在容器上运行docker compose?或者可以看到所有执行的命令吗?我发现我可以使用docker ps--no trunc
查看运行docker容器所执行的所有命令,但所有这些都依赖于docker entrypoint.sh
文件,我似乎无法远程执行该文件。我这样做是否都错了,我需要重构Dockerfile以在远程服务器上运行
远程服务器上的映像
docker-entrypoint.sh
Dockerfile
docker-compose.yml
您看到的错误是准确的:nginx
是一个目录。根据您的docker compose.yml
manifset,根目录中有一个nginx
文件夹,您可以将其用作nginx
服务的生成上下文
nginx:
build: ./nginx # Here's the evidence for the nginx folder.
ports:
构建django_web
图像时,将整个上下文目录复制到/app
,其中包括nginx
目录
COPY . /app
# set working directory
WORKDIR /app
您的username/srdc\u prod
图像的CMD
是nginx-g守护进程关闭代码>,由您的docker entrypoint.sh
执行。这会失败,因为nginx
是一个目录
COPY . /app
# set working directory
WORKDIR /app
根据您的docker compose.yml
清单,您实际需要的CMD
看起来像是daphne-b0.0.0-p8000 srdc.asgi:application
或类似的东西,但不是nginx
,它没有安装在基于阿尔卑斯山的映像中
有些建议超出了问题的范围
如果在DeV中使用DOCKE撰写,请考虑在宿主环境中使用它,而不是运行RAW <代码> DOCKER运行命令。
更好的是,在swarm模式下使用Docker。您可以通过这种方式重新使用清单文件,尽管您需要删除一些不推荐使用的内容(例如,取决于
),并稍微扩展一下服务定义。使用swarm模式或其他编排工具将使将来更容易扩展您的服务,此外,您还可以获得一些其他方便的功能,如机密、重启策略、网络隔离等
也许我遗漏了什么,但是在你的Dockerfile中你似乎没有安装nginx,但是你的CMD
是nginx-g…
。如果该命令是daphne…
?有一个名为“nginx”的目录,它有一个Dockerfile。我可能应该包括它。但这是nginx
服务的Dockerfile
,对吗?根据您正在运行的映像(srdc\u prod
),您的问题似乎是关于django\u web
服务的,它不需要nginx
的Dockerfile
。您列出了三个容器,看起来您在错误的容器中运行了nginx
命令。谢谢。你能详细阐述一下这个代码吗?如果你在DeV中使用DOCKE撰写,考虑在你的宿主环境中使用它,而不是运行原始的DOCKER运行命令。< /代码>?如果不将repo克隆到远程服务器上,我看不到一种简单的方法来实现这一点。我将研究群集模式。谢谢通常,除了docker-compose.yml文件,以及一些用于配置的env文件之外,您不需要在远程服务器上放置任何东西。所有的映像都应该存在于某个容器注册表中的云中,并且每个映像都应该拥有它需要运行的所有东西(即所有的应用程序代码和资产等等)。在您共享的YAML文件中,django容器装载/app
目录,但在构建的映像中app
被复制到容器中。因此,您不需要在远程服务器上克隆repo?你有什么链接可以让我在prod中运行docker compose吗?谢谢对不起,我没有任何链接。我在prod、QA和UAT中使用Docker Swarm。我个人只在所有环境中使用一个docker-compose.yml文件,但每个环境都有单独的环境文件。在我看来,服务定义在所有环境中都应该是相同的,从env到env的变化应该可以使用环境变量进行配置。
version: '3'
services:
django_web:
build: .
command: bash -c "daphne -b 0.0.0.0 -p 8000 srdc.asgi:application"
expose:
- 8000
image: srdc:v0
container_name: srdc_django_web
volumes:
- .:/app
- static_volume:/var/www/srdc/static/
depends_on:
- db
nginx:
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- static_volume:/var/www/srdc/static/
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
depends_on:
- django_web
db:
image: postgres
container_name: "my_postgres"
ports:
- "54320:5432"
volumes: - my_dbdata:/var/lib/postgresql/data
volumes: my_dbdata:
static_volume: media_volume:
nginx:
build: ./nginx # Here's the evidence for the nginx folder.
ports:
COPY . /app
# set working directory
WORKDIR /app