同时为docker和compose文件指定端口

时间:2019-05-22 10:34:49

标签: docker docker-compose

我已经构建了一个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

3 个答案:

答案 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