假设我想创建两个服务:
所以我创建了docker-compose.yml文件
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
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=9293Dockerfile -用于第一个服务
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-套接字。
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:
{
"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文件:
const port = process.env.PORT;
console.log("connected to port index " + port);回馈:
connected to port index 5000server.js文件:
const port = process.env.PORT;
console.log("connected to port server " + port);回馈:
connected to port index 7000UPD2:
检查5000端口:
[
{
"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
[
{
"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
}
}
}
}
]发布于 2022-07-10 22:52:41
根据码头容器inspect输出,您似乎正在运行以下命令:
"Path": "docker-entrypoint.sh",
"Args": [
"npm",
"run",
"dev"
],
"Cmd": [
"npm",
"run",
"dev"
]在这两个文件中,这与您在command文件中为两个容器提供的docker-compose.dev.yml是一致的:
command: npm run dev正如docker-compose 文档中所述,请注意,这样做是在覆盖容器Dockerfile命令。
这意味着两个容器都在运行dev脚本。
根据您的项目结构,结果是两个容器共享相同的package.json和代码。
在package.json中,您定义了如下dev脚本:
"scripts": {
"start": "nodemon index.js && nodemon server.js",
"dev": "nodemon index.js && nodemon server.js"
},这意味着根据每个容器中的index.js变量声明,您将在两个容器中启动具有不同端口的PORT,但它们毕竟都在运行index.js。
这就解释了为什么每次调用都得到相同的输出:
connected to port index ...虽然我的建议是将每个容器的源代码分开,但是为了解决这个问题,您可以尝试在每个容器中运行不同的脚本。我的意思是,在您的package.json文件中,我将包含一个新脚本,server,例如:
"scripts": {
"start": "nodemon index.js && nodemon server.js",
"dev": "nodemon index.js",
"server": "nodemon server.js"
},并在docker中启动容器时使用新脚本-撰写:
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作为另一种选择,您可以删除这些行:
command: npm run dev从您的docker-compose.dev.yml文件:
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:
CMD ["node", "index.js"]以及:
CMD ["node", "server.js"]我认为它也会起作用。
正如我所说的,请考虑在任何情况下重新排序您的项目结构,以避免使用相同的目录来构建您的两个应用程序,因为您可以看到这可能是几个问题的原因。
发布于 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)将回答查询,即使它在服务器容器中。
https://stackoverflow.com/questions/72896029
复制相似问题