Как работает команда ENTRYPOINT, показано в приведенном ниже файле компоновки докера. Я нашел файл docker Compose в реплике Set mongo docker-compose. «usr/bin/mongod» — это первая команда, указанная в ENTRYPOINT, мой вопрос в том, запустит ли usr/bin/mongod локальный mongo и запустит его с помощью контейнера докеров, или он вытащит образ mongo из репозитория и запустит его как контейнер, если да, то почему мы используем «usr/bin/mongod».
version: "3"
services:
mongo-1:
hostname: mongo-1
container_name: mongo-1
image: mongo:4.0
ports:
- "127.0.0.1:28000:28000"
volumes:
- ./mongo-1/data:/data/db
restart: always
entrypoint: [ "/usr/bin/mongod", "--port", "28000", "--bind_ip_all", "--replSet", "rs1" ]
используя этот файл компоновки, я могу подключить mongoDB, работающую через порт 28000, с хост-машины, но когда я заменяю ENTRYPOINT на CMD в файле компоновки, я не могу подключить mongoDB с хост-машины.
Вы используете образ «mongo: 4.0», который имеет свою собственную ENTRYPOINT и CMD. Когда вы повторно объявляете любой из них в своем docker-compose.yml, вы перезаписываете исходные.
ENTRYPOINT — это основная команда, а CMD — это только параметры, отправляемые основной команде. По этой причине он работает для вас, когда вы определяете ENTRYPOINT с помощью действительной команды. Если вы измените его на CMD, то при запуске будет исходная ENTRYPOINT ("docker-entrypoint.sh") и новая команда.
Ваша точка входа использует двоичный файл из вашего контейнера, основанный на указанном изображении.
Для справки вы можете посмотреть Dockerfile официального образа: https://github.com/docker-library/mongo/blob/40056ae591c1caca88ffbec2a426e4da07e02d57/4.0/Dockerfile
ENTRYPOINT и CMD определяются в конце.
Возможный дубликат В чем разница между CMD и ENTRYPOINT в Dockerfile?