Я создал API, используя node.js
Я преобразовал его в изображение, выполнив команду docker build -t droneapi:1.0
используя этот Dockerfile.
FROM node:19-alpine
ENV MONGO_DB_USERNAME = admin \
MONGO_DB_PWD=password
RUN mkdir -p /home/droneAPI
COPY . /Users/styles/Programming/DroneAPI2
CMD ["node", "/Users/styles/Programming/DroneAPI2/Drones/server.js"]
Я побежал docker run droneapi:1.0
, чтобы создать контейнер для общения с моим контейнером mongodb, но получил сообщение об ошибке: getaddrinfo ENOTFOUND mongodb
Я использую мангуста, чтобы попытаться связаться с БД
onst connectDB = async () => {
try{
const conn = await mongoose.connect("mongodb://admin:password@mongodb:27017", {dbName: 'drobedb'})
console.log(`MongoDB Connected: ${conn.connection.host}`.cyan.underline)
}catch (error){
console.log(`Error: ${error.message}`.red.underline.bold)
process.exit(1)
}
}
Я попытался заменить «mongodb» в строке подключения на localhost и получил Error: connect ECONNREFUSED 127.0.0.1:27017
Вот мой файл mongo.yaml
version: '3'
services:
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
mongo-express:
image: mongo-express
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
Я новичок в докере, поэтому буду признателен за любую помощь.
Когда мы запускаем контейнерный стек через compose-файл, для нас создается сеть для этого compose-стека, и все контейнеры привязываются к этой сети. Когда мы запускаем контейнер через docker run ...
, он присоединяется к сети по умолчанию. Контейнеры в разных сетях не могут взаимодействовать друг с другом. Я бы порекомендовал добавить контейнер dronapi в файл компоновки:
version: '3'
services:
...
drone-api:
bulid:
context: .
dockerfile: path/to/Dockerfile
...
depends_on:
- mongodb # to start this container after mongodb has been started
Если мы хотим запустить стек, мы можем запустить docker compose up -d
. Обратите внимание, что если образ был создан ранее, он не будет автоматически перестроен. Чтобы восстановить образ, мы можем запустить docker compose up --build -d
.
В качестве отступления: я бы рекомендовал следовать 12 факторам для облачных приложений (12factors.net) . В частности, я бы порекомендовал внедрить конфигурацию базы данных (12factors.net).
Он определяет контекст сборки (в docker build .
.
обозначает контекст). В компоновочном файле dockerfile
указан относительно context
. Рекомендую прочитать соответствующую страницу документации (docs.docker.com).
большое спасибо! это сработало. Позволь мне спросить. что делает контекстный тег?