如何解决如何使用本地域名而不是 localhost 访问 Docker 容器?
我正在尝试在我的 Ubuntu 机器上 Dockerize 一个包含以下项目的项目:
- 后端:Symfony + MySQL
- 前端:Vue.js
- 登陆:一个常规的 HTML/CS/JS 登陆页面
这三个子项目位于不同的存储库中。我从后端开始,并设法让它工作。
这是我的docker-compose.yml
version: '3.7'
services:
database:
container_name: database
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_DATABASE: ${DATABASE_NAME}
volumes:
- ./docker/database/init:/docker-entrypoint-initdb.d
ports:
- '3306:3306'
networks:
aforable-network:
ipv4_address: 172.20.128.1
healthcheck:
test: ["CMD","mysqladmin","ping","-h","localhost"]
timeout: 1s
retries: 100
restart: unless-stopped
php:
container_name: php
image: php
build: docker/php
volumes:
- ./:/var/www/aforable:delegated
ports:
- "9000:9000"
networks:
aforable-network:
ipv4_address: 172.20.128.2
env_file:
- .env
depends_on:
- database
restart: unless-stopped
server:
container_name: server
image: nginx:alpine
volumes:
- ./:/var/www/aforable:delegated
- ./docker/server/init:/etc/nginx/conf.d
ports:
- "80:80"
networks:
aforable-network:
ipv4_address: 172.20.128.3
depends_on:
- php
- database
restart: unless-stopped
extra_hosts:
- "api.aforable.dev:172.20.128.3"
networks:
aforable-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
nginx conf 文件如下所示:
server {
server_name _;
root /var/www/aforable/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
# php refers to docker-compose php service
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/api_aforable_error.log;
access_log /var/log/nginx/api_aforable_access.log;
}
以及用于 php 服务的 Dockerfile:
FROM php:7.4-fpm
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Install PHP extensions
RUN docker-php-ext-install \
pdo_mysql \
mbstring
WORKDIR /var/www/aforable
有了这个,我可以通过 http://localhost/
正确访问我的后端,但我真正想要的是使用像 api.aforable.dev
这样的本地域来访问它。
我尝试为每个服务附加一个静态 IP,但我的本地机器似乎无法访问 172.20.128.3 网络。
事实上,因为我的服务器容器响应本地主机,所以我尝试在我的 /etc/hosts
文件中添加以下行:
127.0.0.1 api.aforable.dev
但这都不起作用...
问题是,我需要在不同的网络 IP 中拥有后端服务器、前端服务器和登陆服务器,以便能够在没有冲突的情况下公开端口 80。并且还可以使用自定义本地域名访问它们。
我怎样才能做到这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。