AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1162418
Accepted
Sam Tyurenkov
Sam Tyurenkov
Asked: 2024-07-12 14:56:06 +0800 CST2024-07-12 14:56:06 +0800 CST 2024-07-12 14:56:06 +0800 CST

O mapeamento de domínio e porta não funciona no Google Compute Engine com Docker e Nginx

  • 772

Em primeiro lugar, quero ressaltar que estou implantando meu aplicativo de uma forma não recomendada.
O Google sugeriu a implantação de um único contêiner por meio da GUI: https://cloud.google.com/compute/docs/containers/deploying-containers

No entanto, estou fazendo isso de uma maneira diferente: eu puxo meu projeto e, em seguida, inicio-o com docker-compose e habilito 7 contêineres com nginx, php, postfix, redis, db e algumas outras coisas.

janela de encaixe ps

O firewall da instância de VM permite http e https. E posso me conectar ao IP do host via http. No entanto, parece que não passa corretamente o domínio para o nginx e não consigo me conectar via nome de domínio.

O DNS é adicionado corretamente e o nome de domínio aponta para minha VM, mas depois disso ele entra no tempo limite.

parte do meu docker-compose.yml:

  nginx-custom:
    depends_on:
      - db
      - php-fpm-custom
      - phpmyadmin
    image: nginx-custom:latest
    container_name: nginx-custom
    links:
      - phpmyadmin:phpmyadmin
    build:
      context: ./docker/nginx/
      args:
        USER_ID: ${USER_ID}
        GROUP_ID: ${GROUP_ID}
        SITE_DOMAIN: ${SITE_DOMAIN}
        DB_HOST: ${DB_HOST}
        DB_ADMIN_WEBPATH: ${DB_ADMIN_WEBPATH}
    restart: always
    volumes:
      - ./ssl:/etc/nginx/ssl
      - .:/var/www/site
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - 80:80
      - 443:443
    expose:
      - '80'
      - '443'
    networks:
      - app-network

E default.conf para nginx:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
        return 403;
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name <SITE_DOMAIN added here via sed>;

    root /var/www/site/web;
    index index.php;

    location / {
            try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php-fpm-custom:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
}

O que me confunde nos documentos:

Você não pode mapear as portas de uma instância de VM para as portas do contêiner (opção -p do Docker). Para permitir o acesso aos seus contêineres, consulte Publicação de portas de contêiner.

Acho que esse é o motivo, mas não tenho certeza de como consertar, considerando que estou implantando com o docker-compose. Porque o projeto local funciona bem e posso mapear um site.test na minha máquina local.

nginx
  • 2 2 respostas
  • 76 Views

2 respostas

  • Voted
  1. Imran Premnawaz
    2024-07-12T22:25:24+08:002024-07-12T22:25:24+08:00

    O Google Compute Engine não oferece suporte ao mapeamento de portas como a opção -p do docker (comando docker run -p para mapear a porta do contêiner para uma porta do host).

    De acordo com o documento oficial do GCP sobre publicação de portas de contêineres :

    As portas de contêiner têm um mapeamento individual para as portas da VM host. Por exemplo, uma porta 80 de contêiner é mapeada para a porta 80 da VM do host. O Compute Engine não oferece suporte à sinalização de publicação de porta (-p), e você não precisa especificá-la para que o mapeamento funcione.

    Alternativa-1:

    Você pode usar um ambiente flexível do App Engine com um ambiente de execução personalizado. É mais adequado para executar contêineres no GCE.

    Alternativa-2:

    Tente usar um balanceador de carga, que fornece um endereço IP público estável que não muda se você reiniciar sua VM também. Ele roteia o tráfego do seu domínio para o seu contêiner na rede Docker-Compose. Nas configurações de DNS, certifique-se de que seu nome de domínio esteja apontando para o endereço IP externo do seu balanceador de carga.

    Consulte também o problema semelhante do Github para obter mais detalhes.

    • 0
  2. Best Answer
    Sam Tyurenkov
    2024-07-14T04:43:52+08:002024-07-14T04:43:52+08:00

    Bem, descobri que usei um IP do meu outro servidor, não daquele. Erro estúpido, isso esgotou algum tempo.

    No entanto, experimentei configurações enquanto tentava descobrir e também mudei minha configuração para usarnetwork_mode: "host"

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve