mongodb/mongo-cxx-driverMongoDB is a cross-platform document-oriented NoSQL database. MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB, Inc..
This image provides both a C++ driver as well as a C driver which are used to connect to MongoDB. The C++ driver is also known as mongo-cxx-driver and the C driver is also known as mongo-c-driver or libmongoc.
Important: the following tags are provided for development purposes only and do NOT receive security updates.
First, get access to a MongoDB database server. The easiest way to do this is by
using Atlas, where you can run an M0
instance for
free.
Next, create a Dockerfile like so.
Dockerfile# Dockerfile FROM mongodb/mongo-cxx-driver:3.10.1-redhat-ubi-9.4 WORKDIR /build RUN microdnf upgrade -y && microdnf install -y g++ COPY ping.cpp /build/ RUN g++ \ -o ping \ ping.cpp \ -I/usr/local/include/bsoncxx/v_noabi/ \ -I/usr/local/include/mongocxx/v_noabi/ \ -lmongocxx \ -lbsoncxx CMD /build/ping
Now let's create a simple program to ping the server. Let's name this program
ping.cpp. Notice that the connection string is stored as an environment
variable and is retrieved at runtime.
C// ping.cpp #include <cstdlib> #include <string> #include <bsoncxx/json.hpp> #include <mongocxx/client.hpp> #include <mongocxx/instance.hpp> std::string lookup_env(const std::string &name) { char *env = std::getenv(name.c_str()); if (!env) { throw std::runtime_error("missing environment variable: " + name); } return env; } int main() { try { // Create an instance. mongocxx::instance inst{}; std::string connection_string = lookup_env("MONGO_CONNECTION_STRING"); const auto uri = mongocxx::uri{connection_string}; // Set the version of the Stable API on the client. mongocxx::options::client client_options; const auto api = mongocxx::options::server_api{ mongocxx::options::server_api::version::k_version_1}; client_options.server_api_opts(api); // Setup the connection and get a handle on the "admin" database. mongocxx::client conn{uri, client_options}; mongocxx::database db = conn["admin"]; // Ping the database. const auto ping_cmd = bsoncxx::builder::basic::make_document( bsoncxx::builder::basic::kvp("ping", 1)); db.run_command(ping_cmd.view()); std::cout << "Pinged your deployment using the MongoDB C++ Driver. " << "You successfully connected to MongoDB!" << std::endl; } catch (const std::exception &e) { // Handle errors std::cerr << "Exception: " << e.what() << std::endl; } return 0; }
Make sure that both Dockerfile and ping.cpp are in the same directory as
each other. For example, see the directory structure below:
$ tree . . ├── Dockerfile └── ping.cpp
Now we need to build the Docker image. Let's name this image mongocxx-ping
shdocker build . -t mongocxx-ping
We need to set the environment variable that contains the connection string for our database. For an Atlas cluster, you can construct the connection string like so:
'mongodb+srv://<your username here>:<your password here>@<database URL>/'
In Atlas, you can find your connection string by navigating to the Database
option underneath Deployment, then select Connect, click Drivers, then
select the C++ driver. Remember to fill in the <password> parameter with
your actual password.
For further help in constructing a connection string, see the MongoDB documentation here.
Now that we have constructed the connection string, run the command below with said connection string.
shdocker run --env MONGO_CONNECTION_STRING='<your connection string here>' --rm mongocxx-ping
After running the previous line, you should see this output below:
Pinged your deployment using the MongoDB C++ Driver. You successfully connected to MongoDB!
Because the C++ driver is a wrapper around the C driver, this image also includes the MongoDB C driver.
First, get access to a MongoDB database server. The easiest way to do this is by
using Atlas, where you can run an M0
instance for
free.
Next, create a Dockerfile like so.
Dockerfile# Dockerfile FROM mongodb/mongo-cxx-driver:3.10.1-redhat-ubi-9.4 WORKDIR /build RUN microdnf upgrade -y && microdnf install -y gcc COPY ping.c /build/ RUN gcc \ -o ping \ ping.c \ -I/usr/local/include/libmongoc-1.0/ \ -I/usr/local/include/libbson-1.0 \ -L/usr/local/lib64/ \ -lmongoc-1.0 \ -lbson-1.0 CMD /build/ping
Now let's create a simple program to ping the server. Let's name this program
ping.c. Notice that the connection string is stored as an environment variable
and is retrieved at runtime.
C/* ping.c */ #include <mongoc/mongoc.h> int main(void) { mongoc_client_t *client = NULL; bson_error_t error = {0}; mongoc_server_api_t *api = NULL; mongoc_database_t *database = NULL; bson_t *command = NULL; bson_t reply = BSON_INITIALIZER; int rc = 0; bool ok = true; /* Initialize the MongoDB C Driver. */ mongoc_init(); const char *connection_string = getenv("MONGO_CONNECTION_STRING"); if (!connection_string) { fprintf( stderr, "environment variable 'MONGO_CONNECTION_STRING' is missing\n" ); rc = 1; goto cleanup; } client = mongoc_client_new(connection_string); if (!client) { fprintf(stderr, "failed to create a MongoDB client\n"); rc = 1; goto cleanup; } /* Set the version of the Stable API on the client. */ api = mongoc_server_api_new(MONGOC_SERVER_API_V1); if (!api) { fprintf(stderr, "failed to create a MongoDB server API\n"); rc = 1; goto cleanup; } ok = mongoc_client_set_server_api(client, api, &error); if (!ok) { fprintf(stderr, "error: %s\n", error.message); rc = 1; goto cleanup; } /* Get a handle on the "admin" database. */ database = mongoc_client_get_database(client, "admin"); if (!database) { fprintf(stderr, "failed to get a MongoDB database handle\n"); rc = 1; goto cleanup; } /* Ping the database. */ command = BCON_NEW("ping", BCON_INT32(1)); ok = mongoc_database_command_simple( database, command, NULL, &reply, &error ); if (!ok) { fprintf(stderr, "error: %s\n", error.message); rc = 1; goto cleanup; } bson_destroy(&reply); printf( "Pinged your deployment using the MongoDB C Driver. " "You successfully connected to MongoDB!\n" ); cleanup: bson_destroy(command); mongoc_database_destroy(database); mongoc_server_api_destroy(api); mongoc_client_destroy(client); mongoc_cleanup(); return rc; }
Make sure that both Dockerfile and ping.c are in the same directory as each
other. For example, see the directory structure below:
$ tree . . ├── Dockerfile └── ping.c
Now we need to build the Docker image. Let's name this image mongoc-ping
shdocker build . -t mongoc-ping
We need to set the environment variable that contains the connection string for our database. For an Atlas cluster, you can construct the connection string like so:
'mongodb+srv://<your username here>:<your password here>@<database URL>/'
In Atlas, you can find your connection string by navigating to the Database
option underneath Deployment, then select Connect, click Drivers, then
select the C driver. Remember to fill in the <password> parameter with your
actual password.
For further help in constructing a connection string, see the MongoDB documentation here.
Now that we have constructed the connection string, run the command below with said connection string.
shdocker run --env MONGO_CONNECTION_STRING='<your connection string here>' --rm mongoc-ping
After running the previous line, you should see this output below:
Pinged your deployment using the MongoDB C Driver. You successfully connected to MongoDB!
Apache License Version 2.0
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务