为docker和compose文件指定端口
我已经构建了一个Docker compose文件,在它们自己的容器中运行数据库和nodejs微服务 如果我没有指定暴露端口,数据库似乎会停止工作,即使我已经在compose文件中指定了它们。我们必须在这两个地方指定端口吗 数据库/Dockerfile为docker和compose文件指定端口,docker,docker-compose,Docker,Docker Compose,我已经构建了一个Docker compose文件,在它们自己的容器中运行数据库和nodejs微服务 如果我没有指定暴露端口,数据库似乎会停止工作,即使我已经在compose文件中指定了它们。我们必须在这两个地方指定端口吗 数据库/Dockerfile FROM mysql ENV MYSQL_DATABASE=test ENV MYSQL_ROOT_PASSWORD=password EXPOSE 6603:3306 COPY ./schema.sql /docker-entrypoint
FROM mysql
ENV MYSQL_DATABASE=test
ENV MYSQL_ROOT_PASSWORD=password
EXPOSE 6603:3306
COPY ./schema.sql /docker-entrypoint-initdb.d/
docker compose.yml
version: '3'
services:
database:
build:
./database
ports:
- "6603:3306"
image: "test-mysql"
container_name: "test-mysql"
web:
build:
./service
ports:
- "8080:8080"
depends_on:
- database
image: "test-nodejs"
container_name: "test-nodejs"
restart: on-failure
我是否必须在数据库/Dockerfile和docker compose.yml文件中指定端口
6603:3306
?在Dockerfile中仅EXPOSE 3306
,它告诉在该端口上运行的容器内部数据库
端口:
-“6603:3306”
这非常完美,它告诉外部容器您可以使用6603端口访问DB。仅
暴露3306
-在dockerfile中,它告诉内部容器DB在该端口上运行
端口:
-“6603:3306”
这非常完美,告诉外部容器您可以使用6603端口访问DB。在现代Docker上,
EXPOSE
语句几乎完全是文档。一旦端口在Dockerfile中公开,您也不能取消公开,标准的mysql
映像将已经expose 3306
,因此您不需要在自己的Dockerfile中使用expose
行
(在任何情况下,Dockerfile都不能指定它想要使用的特定主机端口,只能指定应该可见的容器端端口。)在现代Docker上,
EXPOSE
语句几乎完全是文档。一旦端口在Dockerfile中公开,您也不能取消公开,标准的mysql
映像将已经expose 3306
,因此您不需要在自己的Dockerfile中使用expose
行
(在任何情况下,docker文件都不能指定要使用的特定主机端口,只能指定应显示的容器端端口。)是的,必须在文件中指定端口,否则将无法显示容器端口,在docker compose中,如果不指定端口,则无法建立连接 但在docker文件中,您可以
EXPOSE 3360
是的,有必要在文件中指定端口,如果没有它,则无法公开容器端口,而在docker compose中,如果不指定端口,则无法建立连接 但在docker文件中,您可以
EXPOSE 3360
问题是为什么要在两个文件中都指定端口,一个文件还不够吗?您必须告诉应用程序在容器中运行的端口,以便第一次在Docker中公开。在compose中,您可能希望将不同的端口缩放或映射到该msql容器。因此,compose.Dockerfile中的端口映射是运行时应用程序bluepriint,形式为命令。Compose用于运行和管理容器。所以,两个不同的实体,因此需要在两个文件中都指定端口问题是,为什么在两个文件中都指定端口,一个文件还不够?您必须告诉您的应用程序在容器中运行的端口,所以必须在Docker中首次公开。在compose中,您可能希望将不同的端口缩放或映射到该msql容器。因此,compose.Dockerfile中的端口映射是运行时应用程序bluepriint,形式为命令。Compose用于运行和管理容器。所以,两个文件中有两个不同的实体,因此需要我的问题是在两个文件中指定端口?为什么不能是一个?我的问题是在两个文件中指定端口?为什么不能成为一个呢?谢谢,这很有帮助,我还有另一个问题,我应该在我的web应用程序(nodejs)的数据库主机中指定什么,
host:“database”
或host:“127.0.0.1”
它们都没有实际工作。谢谢,这很有帮助,我还有另一个问题,我应该在我的web应用程序(nodejs)的数据库主机中指定什么,host:“database”
或host:“127.0.0.1”
它们都没有实际工作。