我在本地主机上有一个Docker应用程序,它运行良好。我正在其中运行PHP,Nginx和Mariadb。
docker-compose.yml
文件包含以下代码:
version: '3'
services:
db:
build:
context: ./mariadb
volumes:
- "./.data/db:/var/lib/mysql"
- "./logs/mariadb:/var/log/mysql"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- default
php-fpm:
build:
context: ./php7-fpm
args:
TIMEZONE: ${TIMEZONE}
volumes:
- ${APP_PATH}:/var/www/app
environment:
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: ${MYSQL_DATABASE}
DB_USERNAME: ${MYSQL_USER}
DB_PASSWORD: ${MYSQL_PASSWORD}
depends_on:
- db
networks:
- default
nginx:
build:
context: ./nginx
args:
- 'php-fpm'
- '9000'
volumes:
- ${APP_PATH}:/var/www/app
- ./logs/nginx/:/var/log/nginx
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
networks:
- default
networks:
default:
driver: bridge
一开始我以为只需要一个compose文件,但是当我构建了镜像,将其推到docker hub并在生产服务器上拉取该镜像时,容器无法启动。我阅读了一些资料,有很多在线资源建议使用 1 到 4 个 Docker 文件,并检查两个 git 分支... 等等。
我明白我至少应该创建另一个名为
docker-compose-prod.yml
的文件,在该文件中,应省略 volumes:
和 port:
属性,但似乎没有明确的指南:
如何在本地使 docker 工作
何时以及如何为生产构建容器。
docker-compose
(第一次执行)?因为我知道在本地,我可以使用第二个执行文件,它会合并两个文件,然后我就有了一个包含端口、卷和所有内容的组合文件,但是在生产服务器上,我只能拉取和运行镜像,而镜像必须预先使用生产yml文件构建,那么当我完成我的应用程序后,我该如何在本地操作?我需要停止Docker,然后使用prod.yml构建它,然后推送它吗? - anondocker-compose.yml
,其中包含最常见的选项,然后将不同的内容放入docker-compose-dev.yml
和docker-compose-prod.yml
中,这只是一个解决方法,请查看是否有人可以在您的新问题中帮助您。 - atline[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
错误?我一直在处理这个问题,直到现在,这可能是我的应用程序无法正常工作的原因。该问题与此和此文件有关。在本地一切正常,但在生产环境中,nginx由于该错误而退出。 - anonphp-fpm
是你的电脑主机名吗?请检查你的/etc/hosts
文件以添加绑定或直接使用 IP 地址。你可以在容器中使用ping php-fpm
来确认。不管怎样,这是另一个问题了。 - atline