首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么码头-撰写本地工作,而不是在亚马逊ecs?

问为什么码头-撰写本地工作,而不是在亚马逊ecs?
EN

Stack Overflow用户
提问于 2022-11-21 05:00:41
回答 1查看 34关注 0票数 0

我试图理解如何使用aws ecs服务,并且无法理解失败的原因--在本地按预期工作,但在使用docker上下文ecs创建过程中失败?图像源为ecr。设置所有creds,例如,创建包含单个默认nginx映像的ecs任务,ecs也按预期工作。我试过发射类型Fargate和EC2。

我的命令设置为在ecs上下文中运行docker-compose.yml:

代码语言:javascript
复制
docker context create ecs temp
docker context use temp
docker compose -p "temp" up

docker-compose.yml

代码语言:javascript
复制
version: '3'
services:
    reverseproxy:
        image: XXXXX.dkr.ecr.us-east-1.amazonaws.com/nginx:latest
        ports:
            - 80:80
            - 8081:8081
            - 8082:8082
        restart: always
 
    apache:
        depends_on:
            - reverseproxy
        # networks:
        #     - bridge-network
        image: XXXXX.dkr.ecr.us-east-1.amazonaws.com/apache:latest
        restart: always

    blue:
        depends_on:
            - reverseproxy
        # networks:
        #     - bridge-network
        image: XXXXX.dkr.ecr.us-east-1.amazonaws.com/blue:latest
        restart: always

nginx文档

代码语言:javascript
复制
worker_processes 1;
 
events { worker_connections 1024; }
 
http {  
 
    sendfile on;
 
    upstream docker-apache {
        server apache:80;
    }

    upstream docker-nginx-balancing {
        server test:80;
    }

    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;
 
    server {
        listen 8081;

        server_name XXX.sytes.net;
 
        location / {
            proxy_pass         http://docker-apache;
            proxy_redirect     off;
        }
    }

    server {
        listen 8082;

        server_name XXX.sytes.net;
 
        location / {
            proxy_pass         http://docker-nginx-balancing;
            proxy_redirect     off;
        }
    }
 
    server {

        root /var/www/html;
        index index.html;

        server_name XXX.sytes.net;
        
        location = /youtube {
            return 301 https://www.youtube.com;           
        }
    }
}

测试:

代码语言:javascript
复制
events {
    worker_connections 1024;
}

http {
    server {

        root /var/www/html;
        index index.html;

        server_name XXX.sytes.net;

        location / {
                try_files $uri $uri/ =404;
        }
    }
}

nginx的Dockerfile:

代码语言:javascript
复制
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80/tcp
STOPSIGNAL SIGQUIT
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

阿帕奇

代码语言:javascript
复制
FROM 8ct8pus/apache-php-fpm-alpine:1.4.3
CMD ["apachectl", "-D", "FOREGROUND"]

测试

代码语言:javascript
复制
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
EN

回答 1

Stack Overflow用户

发布于 2022-11-21 15:02:53

即使您在您的机器或Linux机器上创建了docker context,它也不会像您预期的那样在ECS上工作。

您可以自己在本地测试您的对接者撰写应用程序,然后您可以将您的应用程序与您所知道的docker-compose.yml一起部署到ECS上。

但是,您在这里遗漏了一件重要的事情,您需要在ecs-params.yml文件中指定创建任务定义的参数,以便运行您的ECS服务。

请参阅ECS README.md上ecs参数的选项。

这个自述文件指示您如何用示例编写ecs-params.yml,如下所示:

代码语言:javascript
复制
version: 1
task_definition:
  ecs_network_mode: host
  task_role_arn: myCustomRole
  services:
    logging:
      essential: false
    wordpress:
      cpu_shares: 100
      mem_limit: 500m
    mysql:
      cpu_shares: 105
      mem_limit: 500m
      mem_reservation: 450m
  docker_volumes:
    - name: database_volume
      scope: shared
      autoprovision: true
      driver: local

我使用ecs-cli命令使用docker部署了我的应用程序,它提供的命令与您可以用来编写自己的docker-compose文件的命令相同。

例如,项目目录看起来很简单

代码语言:javascript
复制
.
├── Jenkinsfile
├── my-app-front     # Contains Dockerfile
├── my-app-backend   # Contains Dockerfile
├── docker-compose.yml
├── ecs-params.yml
└── package-lock.json

然后,您可以使用ecs-cli命令按以下顺序部署应用程序:

您可以在GitHub README.md文件中找到ecs命令的详细信息。

  • cli configure
  • ecs-cli configure profile
  • docker compose -f docker-compose.yml build --no-cache
  • ecs-cli push {your-ECR-repo-url}
  • ecs-cli up
  • ecs-cli compose service up

加号:我在Jenkinsfile步骤中指定了所有命令,所以一旦您按下代码,Git钩子将触发我的Jenkins作业,以便它能够顺利地部署到ECR中,并提供ECS服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74514434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档