首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头和两个不同港口的服务

码头和两个不同港口的服务
EN

Stack Overflow用户
提问于 2022-07-07 10:12:19
回答 2查看 732关注 0票数 3

假设我想创建两个服务:

  • 第一个在5000端口
  • 第二个在7000端口

所以我创建了docker-compose.yml文件

代码语言:javascript
复制
version: "3"
services:
  project-server:
    build: .
    ports:
      - "5000:5000"
    environment:
      - PORT=5000
    depends_on:
      - mongo
  project-socket-server:
    build:
      context: "."
      dockerfile: "./Dockerfile-socket"
    ports:
      - "7000:7000"
    environment:
      - PORT=7000
    depends_on:
      - project-server

  mongo:
    image: mongo
    environment:
      - MONGO_INITDB_ROOT_USERNAME=project_admin
      - MONGO_INITDB_ROOT_PASSWORD=9293
    volumes:
      - mongo-db:/data/db
volumes:
  mongo-db:

和docker-compose.dev.yml

代码语言:javascript
复制
version: "3"
services:
  project-server:
    build:
      context: .
      args:
        NODE_ENV: development
    volumes:
      - .:/server
      - /server/node_modules
    environment:
      - NODE_ENV=development
      - MONGO_USER=project_admin
      - MONGO_PASSWORD=9293
    command: npm run dev
  project-socket-server:
    build:
      context: "."
      dockerfile: "./Dockerfile-socket"
      args:
        NODE_ENV: development
    volumes:
      - .:/server
      - /server/node_modules
    environment:
      - NODE_ENV=development
      - MONGO_USER=project_admin
      - MONGO_PASSWORD=9293
    command: npm run dev
  mongo:
    environment:
      - MONGO_INITDB_ROOT_USERNAME=project_admin
      - MONGO_INITDB_ROOT_PASSWORD=9293

Dockerfile -用于第一个服务

代码语言:javascript
复制
FROM node:15
WORKDIR /server
COPY package.json .
RUN npm install --only=production

ARG NODE_ENV
RUN if [ "$NODE_ENV" = "development" ]; \
        then npm install; \
        else npm install --only=production; \
        fi

COPY . ./
EXPOSE 5000
CMD ["node", "index.js"]

以及第二个服务的Dockerfile-套接字。

代码语言:javascript
复制
FROM node:15
WORKDIR /server
COPY package.json .
RUN npm install --only=production

ARG NODE_ENV
RUN if [ "$NODE_ENV" = "development" ]; \
        then npm install; \
        else npm install --only=production; \
        fi

COPY . ./
EXPOSE 7000
CMD ["node", "server.js"]

以及package.json:

代码语言:javascript
复制
{
  "name": "project-server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js && nodemon server.js",
    "dev": "nodemon index.js && nodemon server.js"
  },
  "dependencies": {
    "@socket.io/mongo-adapter": "^0.2.1",
    "cookie-parser": "^1.4.6",
    "express": "^4.18.1",
    "mongodb": "^4.6.0",
    "mongoose": "^6.3.2",
    "nodemailer": "^6.7.5",
    "socket.io": "^4.5.1",
    "stripe": "^9.11.0",
    "ws": "^8.6.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.16"
  }
}

问题是,在我调用docker之后--编写两个容器将启动--这里没有问题,因为我调用localhost:5000,它给了我正确的数据,但是在我调用localhost:7000之后,我看到了所有的数据,就好像我调用localhost:5000。我做错了什么吗?

UPD:

它看起来像是在端口7000上启动index.js,而不是server.js脚本

index.js文件:

代码语言:javascript
复制
const port = process.env.PORT;
console.log("connected to port index " + port);

回馈:

代码语言:javascript
复制
connected to port index 5000

server.js文件:

代码语言:javascript
复制
const port = process.env.PORT;
console.log("connected to port server " + port);

回馈:

代码语言:javascript
复制
connected to port index 7000

UPD2:

检查5000端口:

代码语言:javascript
复制
[
    {
        "Id": "6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51",
        "Created": "2022-07-10T16:01:57.4280865Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "npm",
            "run",
            "dev"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 29648,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-07-10T16:01:58.2066126Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:797d9993a50984ae392476eb54bf79014011d6f146c6b9f2b2f4d46bb6ecdf20",
        "ResolvConfPath": "/var/lib/docker/containers/6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51/hostname",
        "HostsPath": "/var/lib/docker/containers/6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51/hosts",
        "LogPath": "/var/lib/docker/containers/6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51/6a7729ba9734df523fc7424221d866a63a83faec716f6c7efbf77a3797ff9a51-json.log",
        "Name": "/project-server_project-server_1",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/Users/nikita/Desktop/project-server:/server:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "project-server_default",
            "PortBindings": {
                "5000/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "5000"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": [],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/cb1f731b1d50d3ecb220dd8769e1e9088d501429a7760b23474b40fb2baae477-init/diff:/var/lib/docker/overlay2/z2db8ueu6gzx4g6kml9gm4lqh/diff:/var/lib/docker/overlay2/4a5siyd2j04hfi7shvk5uyen8/diff:/var/lib/docker/overlay2/je4ef30hthjwlgjf41mrz7c6p/diff:/var/lib/docker/overlay2/o1n9ak157b8zru8l8zip2oiwu/diff:/var/lib/docker/overlay2/dbdi66mhdlurq8ljn2p8gnotx/diff:/var/lib/docker/overlay2/30480c3ac46a01c8279f265b8055162c1c628ed901b2fa5f13a481933fb6acf2/diff:/var/lib/docker/overlay2/18eb589f35db055e79336c54cc0e5da75d5fed390e4ef3edc149767578e4d304/diff:/var/lib/docker/overlay2/1f82814e597da8a6eef3b98677f9a00eda7ca517b3413fcc43de663692a522b2/diff:/var/lib/docker/overlay2/68e13aa159454b660beda0b20784243a29422d1e67c76a4043d485d2f2bf7fc2/diff:/var/lib/docker/overlay2/3befd14aea9bb18d7ba0fd5aecc2205420fc373fa70b99d93ce1c85de6434fc0/diff:/var/lib/docker/overlay2/85a4d0b611d3d1cd423a78a68cdede7193f8665fef0cfdf573e849abdf32aa08/diff:/var/lib/docker/overlay2/3ee2ce61fd86f7d3eee34d744dfc313068ed76c3a1df068db9d3614c1c4626d5/diff:/var/lib/docker/overlay2/785dcc56e0a473c70c3a8b19b2a163c729fe43c8a2cf8f1a17afc30af0b6a81c/diff:/var/lib/docker/overlay2/a3d6650199856fc04ea61fb1936888adc9324b19fd8ec60f19445bc2fafed8ac/diff",
                "MergedDir": "/var/lib/docker/overlay2/cb1f731b1d50d3ecb220dd8769e1e9088d501429a7760b23474b40fb2baae477/merged",
                "UpperDir": "/var/lib/docker/overlay2/cb1f731b1d50d3ecb220dd8769e1e9088d501429a7760b23474b40fb2baae477/diff",
                "WorkDir": "/var/lib/docker/overlay2/cb1f731b1d50d3ecb220dd8769e1e9088d501429a7760b23474b40fb2baae477/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/nikita/Desktop/project-server",
                "Destination": "/server",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "54ae173b93a965d9ac3feba255694b31718c684026fb05fc5d811de873319ebf",
                "Source": "/var/lib/docker/volumes/54ae173b93a965d9ac3feba255694b31718c684026fb05fc5d811de873319ebf/_data",
                "Destination": "/server/node_modules",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "6a7729ba9734",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "5000/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PORT=5000",
                "NODE_ENV=development",
                "MONGO_USER=project_admin",
                "MONGO_PASSWORD=9293",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=15.14.0",
                "YARN_VERSION=1.22.5"
            ],
            "Cmd": [
                "npm",
                "run",
                "dev"
            ],
            "Image": "project-server_project-server",
            "Volumes": {
                "/server": {},
                "/server/node_modules": {}
            },
            "WorkingDir": "/server",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "com.docker.compose.config-hash": "3ac7f110d763362d49938c1ed5213e7e50072c8ab95ee0b8c58f9dc2826d9ae6",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "project-server",
                "com.docker.compose.project.config_files": "docker-compose.yml,docker-compose.dev.yml",
                "com.docker.compose.project.working_dir": "/Users/nikita/Desktop/project-server",
                "com.docker.compose.service": "project-server",
                "com.docker.compose.version": "1.29.2"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "ebc830dec3ca4c02819e90f2fa79b0db8f88043ba56abb67795bb510fba14ad4",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5000/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "5000"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/ebc830dec3ca",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "project-server_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "project-server",
                        "6a7729ba9734"
                    ],
                    "NetworkID": "3f5807c2c3187687876240b47feb4fd5e997c561dbef6462fd3a195ad0b11f43",
                    "EndpointID": "2ccabd2ce6680746c69b9dfd03b85cf17fe9fea4d614ffc58e2e4b74e1eec9a5",
                    "Gateway": "192.168.192.1",
                    "IPAddress": "192.168.192.3",
                    "IPPrefixLen": 20,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:c0:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

检查端口7000

代码语言:javascript
复制
[
    {
        "Id": "856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4",
        "Created": "2022-07-10T16:01:58.2531359Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "npm",
            "run",
            "dev"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 29787,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-07-10T16:01:58.6972426Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:d9831965ad489f691c2dedbdd5c12c4afc780322e43105add43f0db791d88362",
        "ResolvConfPath": "/var/lib/docker/containers/856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4/hostname",
        "HostsPath": "/var/lib/docker/containers/856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4/hosts",
        "LogPath": "/var/lib/docker/containers/856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4/856312d4b656a689e54567e0c2f33319d7396e16c2d0927b003c4a204b6d58b4-json.log",
        "Name": "/project-server_project-socket-server_1",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/Users/nikita/Desktop/project-server:/socket-server:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "project-server_default",
            "PortBindings": {
                "7000/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "7000"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": [],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/f92796078a9effb55efa307514fcaea257d3ca5cfe1fa9717dd8f26eda800a8b-init/diff:/var/lib/docker/overlay2/z2db8ueu6gzx4g6kml9gm4lqh/diff:/var/lib/docker/overlay2/4a5siyd2j04hfi7shvk5uyen8/diff:/var/lib/docker/overlay2/je4ef30hthjwlgjf41mrz7c6p/diff:/var/lib/docker/overlay2/o1n9ak157b8zru8l8zip2oiwu/diff:/var/lib/docker/overlay2/dbdi66mhdlurq8ljn2p8gnotx/diff:/var/lib/docker/overlay2/30480c3ac46a01c8279f265b8055162c1c628ed901b2fa5f13a481933fb6acf2/diff:/var/lib/docker/overlay2/18eb589f35db055e79336c54cc0e5da75d5fed390e4ef3edc149767578e4d304/diff:/var/lib/docker/overlay2/1f82814e597da8a6eef3b98677f9a00eda7ca517b3413fcc43de663692a522b2/diff:/var/lib/docker/overlay2/68e13aa159454b660beda0b20784243a29422d1e67c76a4043d485d2f2bf7fc2/diff:/var/lib/docker/overlay2/3befd14aea9bb18d7ba0fd5aecc2205420fc373fa70b99d93ce1c85de6434fc0/diff:/var/lib/docker/overlay2/85a4d0b611d3d1cd423a78a68cdede7193f8665fef0cfdf573e849abdf32aa08/diff:/var/lib/docker/overlay2/3ee2ce61fd86f7d3eee34d744dfc313068ed76c3a1df068db9d3614c1c4626d5/diff:/var/lib/docker/overlay2/785dcc56e0a473c70c3a8b19b2a163c729fe43c8a2cf8f1a17afc30af0b6a81c/diff:/var/lib/docker/overlay2/a3d6650199856fc04ea61fb1936888adc9324b19fd8ec60f19445bc2fafed8ac/diff",
                "MergedDir": "/var/lib/docker/overlay2/f92796078a9effb55efa307514fcaea257d3ca5cfe1fa9717dd8f26eda800a8b/merged",
                "UpperDir": "/var/lib/docker/overlay2/f92796078a9effb55efa307514fcaea257d3ca5cfe1fa9717dd8f26eda800a8b/diff",
                "WorkDir": "/var/lib/docker/overlay2/f92796078a9effb55efa307514fcaea257d3ca5cfe1fa9717dd8f26eda800a8b/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/nikita/Desktop/project-server",
                "Destination": "/socket-server",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "7a7d8d6a4c7c004640e16bc4f50be2f9b2cfb94855ebbf864999d5f8a263aa54",
                "Source": "/var/lib/docker/volumes/7a7d8d6a4c7c004640e16bc4f50be2f9b2cfb94855ebbf864999d5f8a263aa54/_data",
                "Destination": "/socket-server/node_modules",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "856312d4b656",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "7000/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PORT=7000",
                "NODE_ENV=development",
                "MONGO_USER=project_admin",
                "MONGO_PASSWORD=9293",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=15.14.0",
                "YARN_VERSION=1.22.5"
            ],
            "Cmd": [
                "npm",
                "run",
                "dev"
            ],
            "Image": "project-server_project-socket-server",
            "Volumes": {
                "/socket-server": {},
                "/socket-server/node_modules": {}
            },
            "WorkingDir": "/server",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "com.docker.compose.config-hash": "1b0d7e398115bad6eae26e92b1d54d15163ca74e7f6570492daf14f023014052",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "project-server",
                "com.docker.compose.project.config_files": "docker-compose.yml,docker-compose.dev.yml",
                "com.docker.compose.project.working_dir": "/Users/nikita/Desktop/project-server",
                "com.docker.compose.service": "project-socket-server",
                "com.docker.compose.version": "1.29.2"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "fe3cffcd72a06aaa92c87cd94280ce914bc13f7e269c51a98901ce639ba4a4d1",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "7000/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "7000"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/fe3cffcd72a0",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "project-server_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "project-socket-server",
                        "856312d4b656"
                    ],
                    "NetworkID": "3f5807c2c3187687876240b47feb4fd5e997c561dbef6462fd3a195ad0b11f43",
                    "EndpointID": "bd3915089cf996887646b20d34386214eca5ea484daa74284c5e1a63c144c3bd",
                    "Gateway": "192.168.192.1",
                    "IPAddress": "192.168.192.4",
                    "IPPrefixLen": 20,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:c0:04",
                    "DriverOpts": null
                }
            }
        }
    }
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-10 22:52:41

根据码头容器inspect输出,您似乎正在运行以下命令:

代码语言:javascript
复制
 "Path": "docker-entrypoint.sh",
 "Args": [
   "npm",
   "run",
   "dev"
 ],

 

 "Cmd": [
   "npm",
   "run",
   "dev"
 ]

在这两个文件中,这与您在command文件中为两个容器提供的docker-compose.dev.yml是一致的:

代码语言:javascript
复制
command: npm run dev

正如docker-compose 文档中所述,请注意,这样做是在覆盖容器Dockerfile命令。

这意味着两个容器都在运行dev脚本。

根据您的项目结构,结果是两个容器共享相同的package.json和代码。

package.json中,您定义了如下dev脚本:

代码语言:javascript
复制
"scripts": {
  "start": "nodemon index.js && nodemon server.js",
  "dev": "nodemon index.js && nodemon server.js"
},

这意味着根据每个容器中的index.js变量声明,您将在两个容器中启动具有不同端口的PORT,但它们毕竟都在运行index.js

这就解释了为什么每次调用都得到相同的输出:

代码语言:javascript
复制
connected to port index ...

虽然我的建议是将每个容器的源代码分开,但是为了解决这个问题,您可以尝试在每个容器中运行不同的脚本。我的意思是,在您的package.json文件中,我将包含一个新脚本,server,例如:

代码语言:javascript
复制
"scripts": {
  "start": "nodemon index.js && nodemon server.js",
  "dev": "nodemon index.js",
  "server": "nodemon server.js"
},

并在docker中启动容器时使用新脚本-撰写:

代码语言:javascript
复制
  project-socket-server:
    build:
      context: "."
      dockerfile: "./Dockerfile-socket"
      args:
        NODE_ENV: development
    volumes:
      - .:/server
      - /server/node_modules
    environment:
      - NODE_ENV=development
      - MONGO_USER=project_admin
      - MONGO_PASSWORD=9293
    command: npm run server

作为另一种选择,您可以删除这些行:

代码语言:javascript
复制
command: npm run dev

从您的docker-compose.dev.yml文件:

代码语言:javascript
复制
ersion: "3"
services:
  project-server:
    build:
      context: .
      args:
        NODE_ENV: development
    volumes:
      - .:/server
      - /server/node_modules
    environment:
      - NODE_ENV=development
      - MONGO_USER=project_admin
      - MONGO_PASSWORD=9293
  project-socket-server:
    build:
      context: "."
      dockerfile: "./Dockerfile-socket"
      args:
        NODE_ENV: development
    volumes:
      - .:/server
      - /server/node_modules
    environment:
      - NODE_ENV=development
      - MONGO_USER=project_admin
      - MONGO_PASSWORD=9293
  mongo:
    environment:
      - MONGO_INITDB_ROOT_USERNAME=project_admin
      - MONGO_INITDB_ROOT_PASSWORD=9293

这将使停靠者使用在不同的CMD s中提供的Dockerfile

代码语言:javascript
复制
CMD ["node", "index.js"]

以及:

代码语言:javascript
复制
CMD ["node", "server.js"]

我认为它也会起作用。

正如我所说的,请考虑在任何情况下重新排序您的项目结构,以避免使用相同的目录来构建您的两个应用程序,因为您可以看到这可能是几个问题的原因。

票数 2
EN

Stack Overflow用户

发布于 2022-07-10 13:46:33

正如"将您的NodeJS应用程序放入码头容器中“中提到的

EXPOSE与其他指令有些不同,因为它没有实际用途。 它仅用于提供关于容器希望公开哪个端口的元数据。 您不需要在容器中使用公开,但是任何必须了解如何连接到它的人都会欣赏它。

您需要检查CMD ["node", "server.js"]Dockerfile-socket中是否在运行时利用了project-socket-server服务environment: PORT=7000

它使用socketio/socket.io-mongo-adapter,可以使用它所适应的现有MongoDB的端口。

正如与“任择议定书”讨论和详细的杰坎帕内罗的更精确的回答一样,根本原因是公共的package.json,公共开发指令首先是index.js (首先),然后是server.js

第一个(index.js)将回答查询,即使它在服务器容器中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72896029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档