docker docker-在另一个容器中编写nginx根目录
docker docker-compose nginx root directory in another container
我的 docker-compose
无法将 nginx
容器指向 app
容器
中的目录 ${APP_CONTAINER_DIR}
现在,连接到 127.0.0.1:8000 我收到 nginx 错误 404;我猜它没有找到文件,因为我在 nginx 日志中没有错误
我认为问题出在 dev.conf 中的 root /var/www/app/public;
但不知道如何解决;我试过 app:root /var/www/app/public;
但这不起作用
这是我的 docker-compose
version: "3"
services:
nginx:
container_name: nginx
image: "${NGINX_IMAGE}"
build: build/nginx
restart: 'always'
env_file: .env
ports:
- "8000:443"
volumes:
- "./build/nginx/build/dev.conf:/etc/nginx/conf.d/default.conf:ro"
- "./build/nginx/build/certs:/etc/nginx/certs"
networks:
- app_network
depends_on:
- app
app:
container_name: app
image: "${APP_IMAGE}"
restart: always
build: build/app
env_file: .env
volumes:
- "${APP_HOST_DIR}:${APP_CONTAINER_DIR}"
depends_on:
- database
networks:
- app_network
database:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
db_data:
db_logs:
networks:
app_network:
dev.conf
#./images/nginx/build/default.conf
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate /etc/nginx/certs/dev.crt;
ssl_certificate_key /etc/nginx/certs/dev.key;
index index.php index.html;
root /var/www/app/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_log /var/log/nginx/app.error.log;
access_log /var/log/nginx/app.access.log;
}
.env
APP_HOST_DIR=./app
APP_CONTAINER_DIR=/var/www/app/
您应该使用安装在 nginx 中的给定文件夹 docker。
如果应用正在生成一些动态 files/content,您还应该在应用 docker 容器中装载相同的主机文件夹。
您的 docker-compose.yml 不完整,您必须将路径 /var/www/app/public
挂载到您的 php-code,例如- "./${APP_HOST_DIR}:/var/www/app/public:ro"
.
此外,您应该删除变量 $APP_CONTAINER_DIR 以支持配置的路径 /var/www/app/public
.
因此您的文件应如下所示:
version: "3"
services:
nginx:
container_name: nginx
image: "${NGINX_IMAGE}"
build: build/nginx
restart: 'always'
env_file: .env
ports:
- "8000:443"
volumes:
- "./build/nginx/build/dev.conf:/etc/nginx/conf.d/default.conf:ro"
- "./build/nginx/build/certs:/etc/nginx/certs"
- "${APP_HOST_DIR}:/var/www/app/public:ro"
networks:
- app_network
depends_on:
- app
app:
container_name: app
image: "${APP_IMAGE}"
restart: always
build: build/app
env_file: .env
volumes:
- "${APP_HOST_DIR}:/var/www/app/public:ro"
depends_on:
- database
networks:
- app_network
database:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
db_data:
db_logs:
networks:
app_network:
我的 docker-compose
无法将 nginx
容器指向 app
容器
${APP_CONTAINER_DIR}
现在,连接到 127.0.0.1:8000 我收到 nginx 错误 404;我猜它没有找到文件,因为我在 nginx 日志中没有错误
我认为问题出在 dev.conf 中的 root /var/www/app/public;
但不知道如何解决;我试过 app:root /var/www/app/public;
但这不起作用
这是我的 docker-compose
version: "3"
services:
nginx:
container_name: nginx
image: "${NGINX_IMAGE}"
build: build/nginx
restart: 'always'
env_file: .env
ports:
- "8000:443"
volumes:
- "./build/nginx/build/dev.conf:/etc/nginx/conf.d/default.conf:ro"
- "./build/nginx/build/certs:/etc/nginx/certs"
networks:
- app_network
depends_on:
- app
app:
container_name: app
image: "${APP_IMAGE}"
restart: always
build: build/app
env_file: .env
volumes:
- "${APP_HOST_DIR}:${APP_CONTAINER_DIR}"
depends_on:
- database
networks:
- app_network
database:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
db_data:
db_logs:
networks:
app_network:
dev.conf
#./images/nginx/build/default.conf
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate /etc/nginx/certs/dev.crt;
ssl_certificate_key /etc/nginx/certs/dev.key;
index index.php index.html;
root /var/www/app/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_log /var/log/nginx/app.error.log;
access_log /var/log/nginx/app.access.log;
}
.env
APP_HOST_DIR=./app
APP_CONTAINER_DIR=/var/www/app/
您应该使用安装在 nginx 中的给定文件夹 docker。
如果应用正在生成一些动态 files/content,您还应该在应用 docker 容器中装载相同的主机文件夹。
您的 docker-compose.yml 不完整,您必须将路径 /var/www/app/public
挂载到您的 php-code,例如- "./${APP_HOST_DIR}:/var/www/app/public:ro"
.
此外,您应该删除变量 $APP_CONTAINER_DIR 以支持配置的路径 /var/www/app/public
.
因此您的文件应如下所示:
version: "3"
services:
nginx:
container_name: nginx
image: "${NGINX_IMAGE}"
build: build/nginx
restart: 'always'
env_file: .env
ports:
- "8000:443"
volumes:
- "./build/nginx/build/dev.conf:/etc/nginx/conf.d/default.conf:ro"
- "./build/nginx/build/certs:/etc/nginx/certs"
- "${APP_HOST_DIR}:/var/www/app/public:ro"
networks:
- app_network
depends_on:
- app
app:
container_name: app
image: "${APP_IMAGE}"
restart: always
build: build/app
env_file: .env
volumes:
- "${APP_HOST_DIR}:/var/www/app/public:ro"
depends_on:
- database
networks:
- app_network
database:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
db_data:
db_logs:
networks:
app_network: