我已经构建了一个Docker compose文件,以在其自己的容器中运行数据库和nodejs微服务。
即使我在compose文件中指定了EXPOSE端口,数据库也似乎停止工作。我们必须在两个地方都指定端口吗?
数据库/ Dockerfile
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
?
答案 0 :(得分:2)
在现代Docker上,EXPOSE
语句几乎完全是文档。一旦端口在Dockerfile中公开,您也无法取消公开,而标准mysql
映像将已经EXPOSE 3306
,因此您不需要EXPOSE
行自己的Dockerfile。
(在任何情况下,Dockerfile都不能指定要使用的特定主机端口,而只能指定容器侧的端口。)
答案 1 :(得分:0)
仅EXPOSE 3306
-在dockerfile中,该容器告诉内部在该端口上运行的容器DB。
端口: -“ 6603:3306”
这很完美,它告诉外部容器您可以使用6603端口访问DB。
答案 2 :(得分:0)
是的,有必要在没有文件的情况下指定端口,否则将无法公开容器端口,而在docker compose中,如果您不指定端口,则将无法建立连接。
但是您可以在docker文件中
EXPOSE 3360